如果我不知道键绑定是什么或它正在触发什么,如何禁用它?
我将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
这个问题有两个部分,
- 我如何找出映射的作用?
- 如何解除映射绑定?
我如何找出映射的作用?
正如其他答案中提到的
bindkey <key_combination>
这将打印与组合键相关的 zle 命令
如何解除映射绑定?
bindkey -r <key_combination>
答案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 '^['