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

NHD*_*aly 7 keyboard-shortcuts zsh

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

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

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

NHD*_*aly 11

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

要发现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
Run Code Online (Sandbox Code Playgroud)

因此,在决定我不在乎 之后_history-complete-older,我只想将其删除。我将此添加到我的.zshrc

# Unbind the escape-/ binding because it gets triggered when I try to do a history search with "/".
bindkey -r "^[/"
Run Code Online (Sandbox Code Playgroud)

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

bindkey -r "^[/"
bindkey "<some-other-key-combo>" _history-complete-older
Run Code Online (Sandbox Code Playgroud)

  • 实际上,您可以通过将它作为单个参数传递给`bindkey` 而没有其他选项:`bindkey '^[/'` 来查找特定的键绑定。 (2认同)

Jde*_*eBP 5

大概是

% bindkey '^[/'
"^[/" _history-complete-older
%
Run Code Online (Sandbox Code Playgroud)

或类似。这就是你如何发现的。

进一步阅读

  • 保罗·弗斯塔德 (2015-12-02)。“ ZLE 内置”。Z 壳牌手册。5.2.


the*_*fog 5

这个问题有两个部分,

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

我如何找出映射的作用?

正如其他答案中提到的

bindkey <key_combination>
Run Code Online (Sandbox Code Playgroud)

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

如何解除映射绑定?

bindkey -r <key_combination>
Run Code Online (Sandbox Code Playgroud)

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