列出通过bindkey生成的当前现有或应用的键绑定

时间:2016-09-09 17:56:55

标签: zsh

我的ZSH在某些时候被告知将 Delete 绑定到一些复杂的函数,键序列或宏,我想从我的配置中删除此绑定。为了更好地找到这个绑定的设置位置,我想看看当我点击删除时Zsh实际上在做什么。

如何查看Zsh环境中存在的所有当前现有键绑定的列表?

1 个答案:

答案 0 :(得分:3)

只需运行bindkey,不带任何参数:

$ bindkey
"^A"-"^C" self-insert
"^D" list-choices
"^E"-"^F" self-insert
"^G" list-expand
"^H" vi-backward-delete-char
"^I" expand-or-complete
"^J" history-substring-search-down
"^K" self-insert
"^L" clear-screen
...

但是,您对删除所描述的特定行为可以通过将其添加到.zshrc来解决:

bindkey    "^[[3~"          delete-char
bindkey    "^[3;5~"         delete-char

解释

根据终端, Delete 会生成以下字符序列之一:

  • ^[[3~
  • ^[3;5~

您可以通过sed -n l查看终端使用的序列为explained here

zsh尝试评估最长的匹配。在这两种情况下,zsh首先匹配^[,匹配 Esc 。如果您启用了vi模式,则会通知zsh将其启用。

在此之后,vi模式将读取剩余的字符,这些字符是以下之一:

  • [3~切换接下来3个字符的情况
  • 3;5~重复上次查找操作3次,然后切换接下来的5个字符的情况

因此,如果您未在此字符序列中明确使用bindkey,则每次按下启用了vi模式的删除时,您都会输入{{1模式和你输入的最后一个字符将是大写的。

感谢下面评论中的Adaephon以获得有关此解释的帮助。