![使用事件指示符时,如何使用 Oh My Zsh 实现单次 Enter 执行?](https://linux22.com/image/1631999/%E4%BD%BF%E7%94%A8%E4%BA%8B%E4%BB%B6%E6%8C%87%E7%A4%BA%E7%AC%A6%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Oh%20My%20Zsh%20%E5%AE%9E%E7%8E%B0%E5%8D%95%E6%AC%A1%20Enter%20%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
在普通的 zsh 中,当我按下 Enter 时,它会运行我输入的命令。太棒了!这包括一次性执行所有必要的事件指示符替换,尽管它会在执行过程中将它们打印出来:
~ % echo a b c # ^M
a b c
~ % echo !$ # ^M
echo c
c
~ % echo !-2:2 # ^M
echo b
b
~ %
我装饰了上面的块来# ^M
指示我在哪里按下了 Enter 键。
相比之下,使用 Oh My Zsh 时,当我按下 Enter 键时,它会立即运行命令,但前提是没有事件指示符替换。其他类型的替换会内联进行,但如果我使用了事件指示符,它不会实际运行命令,而是给我一个新行,其中包含新的提示符和已进行的替换。示例# ^M
与上述相同:
~ % echo a b c # ^M
a b c
~ % echo !$ # ^M
~ % echo c # ^M
c
~ % echo !-2:2 # ^M
~ % echo b # ^M
b
~ % echo $(echo a b) c # ^M
a b c
~ %
请注意,我必须按两次 Enter 才能运行大多数命令,但最后一个带有$()
替换的命令只需一次即可运行。
我该如何配置 OMZ 以在此处使用正常的 zsh 行为,或者在 OMZ 执行完其黑暗魔法后仅将 zsh 配置为恢复正常?我似乎找不到任何关于如何让 zsh 执行此操作的文档。
(我知道我可以使用 Tab 键立即执行替换。这很好,但我知道我输入的内容正确,我只是希望它运行而无需先再次看到它。)
答案1
默认情况下,该选项HIST_VERIFY
未设置。显然,它会在您的配置中的某个地方设置。
HIST_VERIFY 每当用户输入带有历史扩展的行时,不要直接执行该行;而是执行历史扩展并将该行重新加载到编辑缓冲区中。