oh-my-zsh 在空格或制表符上扩展历史记录,但没有输入

oh-my-zsh 在空格或制表符上扩展历史记录,但没有输入

在 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

历史验证

每当用户输入带有历史扩展的行时,不要直接执行该行;而是执行历史扩展并将该行重新加载到编辑缓冲区中。

相关内容