使用事件指示符时,如何使用 Oh My Zsh 实现单次 Enter 执行?

使用事件指示符时,如何使用 Oh My Zsh 实现单次 Enter 执行?

在普通的 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 每当用户输入带有历史扩展的行时,不要直接执行该行;而是执行历史扩展并将该行重新加载到编辑缓冲区中。

相关内容