解释zsh bindkey转义序列

解释zsh bindkey转义序列,zsh,key-bindings,keymapping,zsh-zle,Zsh,Key Bindings,Keymapping,Zsh Zle,我通常在网上找到有趣的zsh键绑定设置(通过bindkey命令)。我的问题是如何解释这些转义序列映射到什么?例如,下面是的一个片段 是否有关于如何表示这些关键地图的参考?另外,它是特定于zsh还是特定于平台 我知道我可以使用cat或查找某些密钥的相应转义序列。考虑到我可以使用蛮力找到反向匹配,但这对键盘上不存在的键(例如Mac笔记本电脑上的Home/End)不起作用。因此,我更喜欢可以确定键的方法,而不考虑物理键盘。如果谈到典型的unix/linux事件流,大致如下所示 终端仿真器程序接收X事件

我通常在网上找到有趣的zsh键绑定设置(通过
bindkey
命令)。我的问题是如何解释这些转义序列映射到什么?例如,下面是的一个片段

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


我知道我可以使用
cat
或查找某些密钥的相应转义序列。考虑到我可以使用蛮力找到反向匹配,但这对键盘上不存在的键(例如Mac笔记本电脑上的Home/End)不起作用。因此,我更喜欢可以确定键的方法,而不考虑物理键盘。

如果谈到典型的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\
XTerm*VT100*翻译:#覆盖\
CtrlLeft:字符串(0x1B)字符串(OD)\n\
CtrlRight:字符串(0x1B)字符串(OC)\n\
注0x1B,即ESC。ESC也打印为^[

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

以下案文应提供更多的补充细节


我的答案是2021年的现代读者使用默认的MacOSXzsh Terminal

  • 运行终端,按⌘ + , 要打开首选项
  • 选择配置文件键盘选项卡,然后在这里显示所有映射

  • 但这不包括其他可能未在X11.Right下运行的终端模拟器。这是多种情况。许多终端、许多外壳、许多键盘驱动程序等。所有这些都是以不同的方式设置的。例如,我永远无法在gnome终端中找到设置翻译的位置。这取决于特定的终端你有仿真器。你有哪一个?“PC风格的功能键”有第二个表,上面写着“Home是CSI H,End是CSI F”。CSI恰好在一开始就被描述为“ESC[控制序列导入器(CSI是0x9b)”。所以这基本上是你最初的四个示例中的两个。^[[H”=“ESC[H”=“CSI H”.xterm将Home keypress转换为^[[H,zsh将其解释为行的开头。“CSI 1~”和“CSI 4~”被描述为VT220的6键键盘的Home和End。要获取zsh绑定的完整列表,请参阅“man zshzle”并键入“bindkey-M emacs”。为什么有人不能创建一个不同键映射的列表,从common或其他人喜欢的shell开始,然后其他人可以贡献。我仍然不知道如何反向查找我当前拥有的!例如
    \e[3~
    ^[OH
    等!转义序列可以由您自定义。
    XTerm*VT100*Translations:#override \
    Ctrl<Key>Left:          string(0x1B) string(OD) \n\
    Ctrl<Key>Right:          string(0x1B) string(OC) \n\