我喜欢 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。