说实话,我觉得这个快捷键!:0
还不够短,考虑到它还需要shift键。
我想知道是否可以为它创建一个别名或函数,我知道我错过了一些东西。我做了显而易见的事情:
pr() {
!:0
}
和:
alias pr="!:0"
或者,是否Alt + .
存在类似的东西,但仅用于命令部分($0)?我什么也没找到。
答案1
您可以使用以下方法执行此操作fc
:
alias pr='fc -e "sed -i s/\ .*//"'
这要求fc
使用输入的最后一个命令启动编辑器,等待编辑器退出,然后运行(可能修改的)命令。别名不使用常规编辑器,sed
而是仅保留命令的第一个单词。
答案2
首先,请注意,这!:0
不是历史记录最后一行中的命令。这是第一个词。所以如果你跑A=B some-command arg1
,!:0
就会A=B
。
也就是说,既然你提到了Alt.,那就是:
yank-last-arg (M-. or M-_)
将最后一个参数插入到上一个命令中(上一个历史记录条目的最后一个单词)。对于数字参数,其行为与
yank-nth-arg
.[...]完全相同
还有前面提到的yank-nth-arg
:
将第一个参数插入到上一个命令(通常是上一行的第二个单词)的 point 处。有争论n,插入 n上一个命令中的第一个字(上一个命令中的字以字 0 开头)。
所以你可以这样做 Alt0 AltCtrly,或者,因为与参数的yank-last-arg
行为“完全一样”, 。yank-nth-arg
Alt0 Alt.
您可以为此进行绑定,但这有点迂回 -显然readline 没有在指定参数时绑定到命令的机制。你必须绑定到按键序列它首先模仿参数的序列,然后模仿现有绑定的序列,所以你可以这样做:
bind '"\e,": "\e0\e."'
然后Alt,按 获取第一个单词。