我的ZSH在某些时候被告知将 Delete 绑定到一些复杂的函数,键序列或宏,我想从我的配置中删除此绑定。为了更好地找到这个绑定的设置位置,我想看看当我点击删除时Zsh实际上在做什么。
如何查看Zsh环境中存在的所有当前现有键绑定的列表?
答案 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以获得有关此解释的帮助。