解释zsh bindkey转义序列

时间:2011-03-15 15:40:17

标签: zsh key-bindings keymapping 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

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

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

2 个答案:

答案 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库用于相同的目的) 它解释了一些序列在输入行中移动并执行编辑操作。

以下文字应提供更多其他细节。

Zsh Line editor description

Wikipedia article on escape sequences

Xterm Control Sequences

答案 1 :(得分:0)

我的回答是针对 2021 年使用 MacOSX 和默认 zsh 终端的现代读者:

  1. 运行您的终端,按 + , 打开首选项
  2. 选择配置文件 > 键盘标签,然后就可以了,所有的映射都在这里。

Preferences of Terminal, find Profiles, Keyboard then there are the mappings