在 zsh 中使用 oh-my-zsh,您可以输入历史扩展命令,然后按空格键、tab 键或回车键,它就会展开。例如:
ls /path/to/some/directory
cd !$<enter>
将扩展为
cd /path/to/some/directory
但它实际上并没有执行该命令。它仍停留在提示符上以供进一步编辑,您需要再次按 Enter 键才能真正运行该命令。
我昨晚在安装 arch linux,发现安装 shell 附带的 zsh 设置在 tab 和 space 上有历史记录扩展,但按回车键会立即运行扩展的命令,而无需用户再次按回车键。
这正是我想要的,因为它可以帮我省去按键的时间。如果我想编辑扩展,我可以按 Tab 键。如果我想立即运行命令,我可以按 Enter 键。
我认为这与有关magic-space
,我看到了以下行.oh-my-zsh/lib/key-bindings.zsh
bindkey ' ' magic-space # [Space] - do history expansion
但是我找不到在哪里enter
并且tab
也绑定到扩展或者是否有一些选项可以在输入时立即运行该命令。
答案1
自从我开始使用 zsh 以来,这个问题困扰了我好几年,但我终于花时间继续研究,直到我弄清楚了,这是由选项引起的HIST_VERIFY
。该选项已启用.oh-my-zsh/lib/history.zsh
,需要覆盖。
添加以下行来.zshrc
修复此行为:
unsetopt HIST_VERIFY
从man zshoptions
:
历史验证
每当用户输入带有历史扩展的行时,不要直接执行该行;而是执行历史扩展并将该行重新加载到编辑缓冲区中。