在 bash 中,有一些众所周知的快捷方式可以获取上一个命令的参数,例如Alt+.
或$!
等。这些都无法在我的 zsh 中工作,我正在使用一些 zprezto 模块。我找不到任何关于 zprezto 模块对此进行更改的信息。可能是我遗漏了某些 ZSH 设置,或者我可能设置了某些设置,而这些设置禁用了此行为?
答案1
ALT.据我所知,它并不为人所知。我假设它由您在 bash 启动时加载的内容定义。(它对您有什么作用?)
$!
是最近启动的子进程的进程 ID。我假设这是不是您想要输入的内容。:)
!$
是一个(缩短的)历史扩展,应该默认情况下扩展到前一个命令的最后一个参数。zsh 的历史扩展有详细的文档在 zsh 手册中。
历史扩展通常以 开头!,但可以通过设置 的值来更改它$HISTCHARS
: 的第一个字符$HISTCHARS
将用作启动历史扩展的字符。默认情况下,$HISTCHARS
的值设置为!^#
。您可以使用以下方式检查系统上的值:
echo $HISTCHARS
如果确实如此不是以 开头!
,那么您的 zsh 启动中的某些内容设置了不同的值,并且标准的、众所周知的历史扩展(例如!!
和)!$
将不适合您。
更新:
事实证明,我上面写的第一段是完全错误的。我可能不知道ALT.,但这可能是因为我“总是”使用启用了 vi 模式的 zsh。事实上,ALT.(和ALT_,它们的作用相同)在 zsh 的默认 emacs 键绑定中启用。它们绑定到 ZLE 小部件insert-last-word
,它执行您所描述的操作。
如果您使用 zsh 和默认的 emacs 键绑定,但ALT.无法正常工作,则说明您在 shell 启动时加载的某些内容正在覆盖它。您可以使用以下命令重新建立默认键绑定:
bindkey -M emacs "^[." insert-last-word \
"^[_" insert-last-word