Zsh 列出通过bindkey进行的当前现有或应用的密钥绑定

Zsh 列出通过bindkey进行的当前现有或应用的密钥绑定,zsh,Zsh,我的ZSH在某个时候被告知要将Delete绑定到某个复杂的函数、键序列或宏,我想从配置中删除这个绑定。为了更好地找到这个绑定的设置位置,我想看看当我点击Delete时Zsh实际上在做什么 如何查看Zsh环境中当前存在的所有现有密钥绑定的列表?只需运行bindkey,不带任何参数: $ bindkey "^A"-"^C" self-insert "^D" list-choices "^E"-"^F" self-insert "^G" list-expand "^H" vi-backward-del

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


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

只需运行
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
解释 根据终端的不同,“删除”将生成以下字符序列之一:

  • ^[[3~
  • ^[3;5~
您可以通过
sed-nl
as查看终端使用的序列

zsh
尝试计算最长的匹配。在这两种情况下,
zsh
首先匹配与Esc匹配的
^[
模式。如果启用了
vi
模式,这会告诉
zsh
将其打开

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

  • [3~
    切换接下来3个字符的大小写
  • 3;5~
    重复上一次查找操作3次,然后切换接下来5个字符的大小写
因此,如果您没有在此字符序列上显式使用
bindkey
,每次在启用
vi
模式的情况下按Delete键时,您将进入
vi
模式,并且您键入的最后一个字符将大写


感谢下面的注释中的帮助。它实际上与“内置”相反。在vi模式(
viins
vicmd
)中,字符序列
^[[3~
^[3;5~
不是作为一个整体定义的。在这种情况下,
zsh
将评估可能最长的部分。在这种情况下,它会根据终端查找序列
^[
[
3~
,或序列
^[
5~
^[
是Escape并切换到
vicmd
或beep。任何进一步的绑定现在都在
vicmd
中:
[
没有绑定,
3~
切换接下来3个字符的大小写,
3;
重复最后一次查找操作3次,
5~
切换5个字符的大小写。@Adaephon您介意我将该信息添加到答案中,并将其归因于您吗?这非常有趣。我的“内置”解释来自一些小的谷歌搜索,但现在我在删除键上看到的奇怪行为在阅读了你的解释后实际上是有意义的。