无法从 ZSH 中的上一个命令获取参数

无法从 ZSH 中的上一个命令获取参数

在 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

相关内容