解释 zsh bindkey 转义序列

18

我通常会在网上找到一些有趣的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)是行不通的。因此,我更喜欢能够确定键而不受物理键盘限制的方法。


转义序列可以由您自己定制。 - VimNing
2个回答

6
如果说典型的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行编辑器说明 转义序列的维基百科文章Xterm控制序列

1
这取决于您使用的特定终端仿真器。您使用的是哪一个? - Alexander Gorshenev
那么你需要的基本上是上述Xterm控制序列文档中的“VT100”部分和“PC样式功能键”部分。我不认为有一种方法可以要求xterm仅转储您正在考虑的表格。所有这些机器比PC键盘本身还要老,因此今天对我们来说自然的东西对于xterm来说并不自然。 - Alexander Gorshenev
如果您能使用我在原始问题中提供的示例键映射,向我展示如何解释文档grin,我将不胜感激。我很难理解那个文件。 - ejel
1
“PC-Style Function Keys”有第二个表,其中写着“Home是CSI H,End是CSI F”。在一开始的描述中,CSI被描述为“ESC [控制序列引导符(CSI为0x9b)”。所以这基本上是你最初示例的四分之二。“^[[H” == “ESC[H”=“CSI H”。因此,xterm将Home键按下转换为^[[H,zsh将其解释为行首。 “CSI 1〜”和“CSI 4〜”被描述为VT220 6键小键盘的Home和End。要获取完整的zsh绑定列表,请参阅“man zshzle”,然后输入“bindkey -M emacs”。 - Alexander Gorshenev
5
为什么不能有人创建一个不同按键映射列表,从常见的或个人首选的shell开始,然后其他人可以贡献。我仍然不明白如何逆向查找我当前拥有的内容!例如\e[3~^[OH等等! - Ian Vaughan
显示剩余4条评论

-2

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

  1. 运行您的终端,按下 + ,打开首选项
  2. 选择配置文件 > 键盘选项卡,然后您就可以看到所有映射。

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


zsh 不是终端。zsh 是一个 shell。你展示的可能是 iterm,其中之一的终端仿真器。 - undg
@undg:我所说的“zsh终端”是指它是一个“终端”(首字母大写,因为这是macOS内置终端的名称。它不是模拟器),而“zsh”是形容词,用于描述这个名词正在使用zsh作为默认shell。有任何问题吗? - VimNing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接