解释zsh bindkey转义序列

eje*_*jel 11 zsh keymapping key-bindings zsh-zle

我经常在网络上找到有趣的zsh键绑定设置(通过bindkey命令).我的问题是如何解释这些转义序列映射到的内容?例如,这是一个来自oh-my-zshkey-bindings.zsh的片段

bindkey "^[[H" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[F"  end-of-line
bindkey "^[[4~" end-of-line
Run Code Online (Sandbox Code Playgroud)

是否有关于这些键映射如何表示的参考?此外,它是特定于zsh还是特定于平台?

我知道我可以使用其中一个catCtrl-V来查找某些键的相应转义序列.鉴于我可以通过暴力来找到反向匹配,但这不适用于键盘上不存在的键(例如Mac笔记本电脑上的Home/End).因此,我更喜欢无论物理键盘如何都可以确定键的方法.

hor*_*rsh 5

如果谈到典型的unix/linux事件流,图片大致如下.

终端仿真器程序接收X事件,例如按下按钮,另一个按钮被释放.例如,可以使用xev实用程序跟踪这些事件.终端仿真器然后将这些事件转换为转义序列.

这个翻译不是一成不变的.它可以配置.不同的终端仿真器配置不同.例如,可以在.Xdefaults中设置xterm转换:

XTerm*VT100*Translations:#override \
Ctrl<Key>Left:          string(0x1B) string(OD) \n\
Ctrl<Key>Right:          string(0x1B) string(OC) \n\
Run Code Online (Sandbox Code Playgroud)

注意0x1B是ESC.ESC也打印为^ [.

现在,zsh使用zle(并且bash使用readline库用于相同的目的),它解释了一些序列在输入行中移动并执行编辑操作.

以下文本应提供更多其他详细信息.

Zsh Line编辑器描述

关于转义序列的维基百科文章

Xterm控制序列

  • 为什么有些人只是创建一个不同的键映射列表,开始使用普通的或那些人首选的shell,然后其他人可以贡献.我仍然不明白如何反向查找我现在拥有的东西!例如`\ e [3~`,`^ [OH`等等! (4认同)