Mat*_*hew 7 linux zsh shell command-line oh-my-zsh
在 zsh 中,使用 oh-my-zsh,您可以输入历史扩展命令,然后按空格、Tab 或 Enter,它将展开。例如:
ls /path/to/some/directory
cd !$<enter>
Run Code Online (Sandbox Code Playgroud)
将扩展到
cd /path/to/some/directory
Run Code Online (Sandbox Code Playgroud)
但它实际上并不执行该命令。它保留在进一步编辑的提示中,您需要再次按 Enter 键才能实际运行该命令。
我昨晚正在安装 arch linux,发现安装 shell 附带的 zsh 设置在制表符和空格上有历史扩展,但是按 Enter 会立即运行扩展的命令,而不需要用户再次按 Enter。
这就是我想要的,因为它节省了我按键的时间。如果我想编辑扩展,我可以按 Tab 键。如果我想立即运行该命令,我可以按 Enter 键。
我认为这与 有关magic-space,并且我在中看到以下行.oh-my-zsh/lib/key-bindings.zsh
bindkey ' ' magic-space # [Space] - do history expansion
Run Code Online (Sandbox Code Playgroud)
但我找不到在哪里enter,并且tab也绑定到扩展,或者是否有一些选项可以在输入时立即运行命令。
自从我开始使用 zsh 以来,这个问题已经困扰了我很多年,但我终于花时间继续挖掘,直到我弄清楚它是由选项引起的HIST_VERIFY。该选项已启用.oh-my-zsh/lib/history.zsh并且需要被覆盖。
添加以下行来.zshrc修复该行为:
unsetopt HIST_VERIFY
Run Code Online (Sandbox Code Playgroud)
从man zshoptions:
HIST_VERIFY
每当用户输入带有历史扩展的行时,不要直接执行该行;相反,执行历史扩展并将该行重新加载到编辑缓冲区中。