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