Zsh 在未绑定密钥上进入命令模式

Zsh 在未绑定密钥上进入命令模式

我喜欢 Zsh 中的 vi 模式,用bindkey -v.按 escape 会触发命令模式,但令我烦恼的是未绑定的键和弦会触发命令模式,例如 Alt+1 和 F1。有办法阻止吗?

答案1

Alt请注意,当您按+1时,您的终端会发送与按Escapethen时相同的 ESC then 1 字符序列1

在这里,您可以重新定义vi-cmd-mode小部件,以便如果存在挂起的键($KEYTIMEOUT在 ESC 之后几厘秒内接收到的字符,否则不会形成绑定到任何内容的 ESC 启动序列),它们将被丢弃并且小部件会出错。

vi-cmd-mode() {
  local isEsc=1 REPLY
  while (( KEYS_QUEUED_COUNT || PENDING )); do
    isEsc=0
    zle read-command
  done
  ((isEsc)) && zle .$WIDGET
}
zle -N vi-cmd-mode
KEYTIMEOUT=10

这里还将 KEYTIMEOUT 从默认的 40 厘秒降低到 10 厘秒,这样在按下 后Escape,您只需等待 0.1 秒而不是 0.4 秒即可按下下一个键。当您按Alt+时,您的终端仍然可能能够在 0.1 秒内发送 ESC 和 1 1

相关内容