如果我不知道 zsh 键绑定的作用,如何删除它?

如果我不知道 zsh 键绑定的作用,如何删除它?

如果我不知道键绑定是什么或它正在触发什么,如何禁用它?

我将zsh按键模式设置为 vi 模式,通过bindkey -v.

要进行历史搜索,我按Esc进入“命令模式”,然后/开始搜索。然而,如果我按得太快,它会做其他事情,但是我不知道什么!我认为Esc-/是一些键绑定,但我不知道它是什么。我如何找到它并将其关闭?

答案1

经过一番搜索,我找到了答案:

要了解escape sequence组合键正在触发什么,请按照这个优秀的答案:

echo "CtrlVEsc/"

对我来说,它显示为:echo "^[/"CtrlV强制以下键显示为转义序列而不是被解释。所以现在我们知道我们正在努力寻找与 相关的内容"^[/"


要列出所有 zsh 键绑定,只需bindkey不带参数执行:

$ bindkey
"^A"-"^C" self-insert
"^D" list-choices
"^E"-"^F" self-insert
"^G" list-expand
"^H" backward-delete-char
...
"^Y"-"^Z" self-insert
"^[" vi-cmd-mode
"^[," _history-complete-newer
"^[/" _history-complete-older   ### <--- Here it is.
"^[M" vi-up-line-or-history
"^[OA" vi-up-line-or-history
...
"^\\\\"-"~" self-insert
"^?" backward-delete-char
"\M-^@"-"\M-^?" self-insert

所以,既然决定不关心_history-complete-older,我就把它删除。我将此添加到我的.zshrc

# Unbind the escape-/ binding because it gets triggered when I try to do a history search with "/".
bindkey -r "^[/"

相反,如果您只想将其重新绑定到其他键,您可以使用:

bindkey -r "^[/"
bindkey "<some-other-key-combo>" _history-complete-older

答案2

这个问题有两个部分,

  1. 我如何找出映射的作用?
  2. 如何解除映射绑定?

我如何找出映射的作用?

正如其他答案中提到的

bindkey <key_combination>

这将打印与组合键相关的 zle 命令

如何解除映射绑定?

bindkey -r <key_combination>

参考 -http://zsh.sourceforge.net/Guide/zshguide04.html#l95

答案3

大概是

% bindkey '^[/'
"^[/" _history-complete-older
%

或类似的。这就是你发现的方式。

进一步阅读

  • 保罗·福斯塔德 (2015-12-02)。 ”ZLE 内置组件”。Z 外壳手册。 5.2.

答案4

还相关的是KEYTIMEOUT设置,它指示 ZSH 将等待检测多键序列的时间,通过设置最小化:

KEYTIMEOUT=1

如果您感觉超级极端,您还可以删除所有 ESC 之类的绑定,这样 ZSH 就没有多键序列,它将浪费时间等待按下转义键。

bindkey -rpM viins '^['
bindkey -rpM vicmd '^['

相关内容