我经常在网络上找到有趣的zsh键绑定设置(通过bindkey
命令)。我的问题是如何解释这些转义序列映射的内容?例如,以下是oh-my-zsh的key-bindings.zsh
bindkey "^[[H" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[F" end-of-line
bindkey "^[[4~" end-of-line
是否有关于这些键映射如何表示的参考?此外,它是特定于zsh还是特定于平台?
我知道我可以使用cat
或Ctrl-V查找某些键的相应转义序列。鉴于我可以通过暴力来找到反向匹配,但这不适用于键盘上不存在的键(例如Mac笔记本电脑上的Home / End)。因此,无论物理键盘如何,我都更喜欢可以确定键的方法。
答案 0 :(得分: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\
注意0x1B是ESC。 ESC也打印为 ^ [。
现在,zsh使用zle(而bash使用readline库用于相同的目的) 它解释了一些序列在输入行中移动并执行编辑操作。
以下文字应提供更多其他细节。
Wikipedia article on escape sequences
和
答案 1 :(得分:0)