在 zsh 的 vi 仿真中逃逸不是幂等的?

use*_*042 6 vi zsh

我已将 zsh 配置为使用 vi 键绑定。我注意到“逃逸”的一些意外行为。在 vim 中(我还没有测试过 vanilla vi),如果我按两次转义,我可以按一次“i”返回插入模式。在 zsh 中,如果我碰巧按了两次转义,按“i”不会使我返回到插入模式,我必须按两次。另一个例子出现在导航中。如果我点击转义一次,我可以按预期使用 '^' 和 '$'。但是,如果我不小心按了两次(或更多次)转义键,它们将无法工作,直到我返回插入模式并再次转义。

我是否以某种方式错误地配置了 zsh,或者这只是 zsh 的 vi 模拟中的已知差异?

qqx*_*qqx 3

我也明白了。之前没有注意到这一点,因为我通常在 shell 中使用 emacs 绑定。似乎在默认绑定下,在 vicmd 模式下使用转义键会吃掉下一个字符。这看起来可能是处理未定义键的错误。

我可以通过在 vicmd 模式下为转义键定义 noop 绑定来解决这个问题:

noop () { }
zle -N noop
bindkey -M vicmd '\e' noop
Run Code Online (Sandbox Code Playgroud)