Alt + . (点)显示 &,而不是之前的参数

Dav*_*vid 4 keyboard-shortcuts zsh line-editor zle

我(ab)使用Alt+.来恢复上一个命令中的最后一个参数(我使用的是ZSH):例如,

$ convert img.png img.pdf
$ llpp (alt + .) # which produces llpp img.pdf
Run Code Online (Sandbox Code Playgroud)

但有时我会用 llpp

$ llpp pdffile.pdf& 
Run Code Online (Sandbox Code Playgroud)

然后如果我尝试做其他事情,pdffile.pdf我就会遇到麻烦

$ llpp (`Alt` + `.`) # produces llpp &
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法pdffile.pdf使用类似于Alt+ 的东西来恢复.

$ echo $SHELL
/usr/bin/zsh
$ echo $TERM
xterm
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

ESC-.( insert-last-word) 将任何空格分隔或空格分隔的 shell 标记¹视为“单词”,包括标点符号,例如&.

你可以给它一个数字参数来抓取除最后一个词以外的词。积极的辩论从右边数:Alt+ 1 Alt+.相当于Alt+ .Alt+ 2 Alt+.抓住前一个单词,等等Alt+ 0 Alt+.是之前的字,并负参数继续从左边,如Alt+ - Alt+ 1 Alt+.是第一个参数。

我已经copy-earlier-word绑定了ESC-,。其中重复调用ESC-.插入历史中返回的连续命令的最后一个单词,重复调用ESC-,afterESC-.插入同一命令的前一个单词。所以,在你的下面的代码.zshrc,你可以得到一个命令的下一个到最后一个字Alt+ . Alt+ ,

autoload -U copy-earlier-word
zle -N copy-earlier-word
bindkey '^[,' copy-earlier-word
Run Code Online (Sandbox Code Playgroud)

¹在这种情况下,“令牌”有几个合理的定义。在这个答案中,我将按照定义“insert-last-word被认为是一个单独的词的东西”。