在Bash中,我们可以使用Alt+ number+ .选择前一个命令的第 n 个参数,并使用Alt+ ,选择前一个命令。他们循环浏览历史。
例如:
$ ls 1 2 $ echo 10 20
现在按住Alt,然后按0再点,它将显示“ echo”。在不松开的情况下Alt,.再次按,将显示“ ls”。在同一操作中使用1将显示10和1,以此类推。按Alt和逗号将显示历史记录中的整个命令行。还Alt和.展示历史命令的最后一个参数。
请注意,所有这些操作只是将参数(或整个命令行)插入当前光标。他们不会更改当前命令行中已经存在的内容。
我正在使用Zsh和最新的Oh-My-Zsh软件包,但似乎行为有所不同:
Zsh的Alt+号,表示命令的最后一个参数。
的Alt+ 0+ .是相同的击(示出了comman),但 Alt+ number+ .示出的最后n 个参数,即,Alt+ 1+ .在上面的情况下示出了20和2。
该Alt+ ,不显示在历史上的整个命令。
如何在Zsh中做同样的事情?谢谢。
在寻找此功能时,我遇到了Christian Neukirchen的这篇博客文章:
1.您可能知道M-。插入上一行的最后一个参数。有时,您想插入其他参数。有一些选项:使用历史记录扩展,例如,!:-2用于前面一行的第三个单词(如果不确定,请使用TAB对其进行扩展),或使用M-。带有前缀参数:M-2 M-。
但是更好的是:
autoload -Uz copy-earlier-word zle -N copy-earlier-word bindkey "^[m" copy-earlier-word然后,Mm将复制当前行的最后一个单词,然后是第二个最后一个单词,依此类推。但是使用M-。您也可以返回行中!从而:
% echo a b c % echo 1 2 3 % echo% echo b 老兄,我希望我早点知道!
在本文中,M
是指Meta
密钥,也就是Alt
。因此,如Christian所说,从理论上讲,这应该是开箱即用的。所以我去尝试了一下,是的,它确实开箱即用。
负责此行为的zle小部件是insert-last-word
?哪个ALT
+ .
?和digit-argument
?ALT
+ Number
。
这是相关的bindkey
输出:
$ bindkey -L | grep '\^\[[.0-9]' bindkey "^[." insert-last-word bindkey "^[0" digit-argument bindkey "^[1" digit-argument bindkey "^[2" digit-argument bindkey "^[3" digit-argument bindkey "^[4" digit-argument bindkey "^[5" digit-argument bindkey "^[6" digit-argument bindkey "^[7" digit-argument bindkey "^[8" digit-argument bindkey "^[9" digit-argument
因此请检查这些内容是否出现,然后重试。您可以使用所示bindkey
命令的输出来更新原始问题,以帮助缩小问题范围,或者直接在oh-my-zsh中打开详细信息。