Zsh和Bash中的Alt +数字+点和Alt +逗号

use*_*598 6 bash zsh keyboard-shortcuts oh-my-zsh

在Bash中,我们可以使用Alt+ number+ .选择前一个命令的 n 参数,并使用Alt+ ,选择前一个命令。他们循环浏览历史。

例如:

$ ls 1 2
$ echo 10 20
Run Code Online (Sandbox Code Playgroud)

现在按住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中做同样的事情?谢谢。

Mar*_*llà 6

在寻找此功能时,我遇到了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
Run Code Online (Sandbox Code Playgroud)

然后,Mm将复制当前行的最后一个单词,然后是第二个最后一个单词,依此类推。但是使用M-。您也可以返回行中!从而:

% echo a b c
% echo 1 2 3
% echo <M-.><M-.><M-m>
% echo b
Run Code Online (Sandbox Code Playgroud)

老兄,我希望我早点知道!

在本文中,M是指Meta密钥,也就是Alt。因此,如Christian所说,从理论上讲,这应该是开箱即用的。所以我去尝试了一下,是的,它确实开箱即用。

负责此行为的zle小部件是insert-last-word?哪个ALT+ .?和digit-argumentALT+ 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
Run Code Online (Sandbox Code Playgroud)

因此请检查这些内容是否出现,然后重试。您可以使用所示bindkey命令的输出来更新原始问题,以帮助缩小问题范围,或者直接在oh-my-zsh中打开详细信息。