2011-03-15 525 views
8

我通常会在网络上发现有趣的zsh键绑定设置(通过bindkey命令)。我的问题是如何解释这些转义序列映射到的内容?举例来说,这里是从oh-my-zshkey-bindings.zsh解释zsh bindkey转义序列

bindkey "^[[H" beginning-of-line 
bindkey "^[[1~" beginning-of-line 
bindkey "^[[F" end-of-line 
bindkey "^[[4~" end-of-line 

片段是否有关于如何做这些键盘布局所代表的参考?此外,它是特定于zsh的还是平台特定的?

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

回答

4

如果说到一个典型的unix/linux事件流,图片大致如下。

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

此翻译不是石头。它可以配置。不同的终端仿真器配置不同。

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

注0x1B这是ESC:例如的xterm翻译可以在.Xdefaults中这样的设置。 ESC还被打印为^[

现在,zsh使用zle(并且bash使用readline库来达到同样的目的) 它解释了一些序列在输入行周围移动并执行编辑操作。

以下文字应提供更多附加细节。

Zsh Line editor description

Wikipedia article on escape sequences

Xterm Control Sequences

+0

但是,这并不包括可以不X11下运行的其他终端模拟器。 – 2011-03-15 17:10:42

+0

对。这是很多情况。许多终端,许多外壳,许多键盘驱动程序等等。所有这些设置都不同。例如,我永远无法找到在gnome终端中设置翻译的位置。 – horsh 2011-03-15 18:31:10

+0

谢谢你的解释。请原谅我的无知,因为我不确定它是否回答我的问题。我查阅了给定的参考文献,仍然无法找到如何将转义序列转换为相应的键序列(即哪些键按下映射到“^ [[H]) – ejel 2011-03-16 17:38:45