【问题标题】:Interpret zsh bindkey escaped sequences解释 zsh bindkey 转义序列
【发布时间】:2011-07-15 21:50:29
【问题描述】:

我通常会在网上找到有趣的 zsh 键绑定设置(通过bindkey 命令)。我的问题是如何解释这些转义序列映射到什么?例如,这是来自oh-my-zshkey-bindings.zsh 的sn-p

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)。因此,我更喜欢不管物理键盘如何都可以确定按键的方法。

【问题讨论】:

  • 转义序列可以自己自定义。

标签: zsh key-bindings keymapping zsh-zle


【解决方案1】:

我的答案是为 2021 年使用默认 zsh Termnial 的 MacOSX 的现代读者:

  1. 运行终端,按 + , 打开首选项
  2. 选择 Profiles > Keyboard 选项卡,然后在这里,您的所有映射都在这里。

【讨论】:

    【解决方案2】:

    如果说典型的 unix/linux 事件流程,大致如下。

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

    这个翻译不是一成不变的。它可以配置。不同的终端仿真器配置不同。例如 xterm 翻译可以像这样在 .Xdefaults 中设置:

    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

    【讨论】:

    • 但这不包括其他可能不在 X11 下运行的终端仿真器。
    • 对。这是多对多的情况。许多终端,许多外壳,许多键盘驱动程序等。所有这些都以不同的方式设置。例如,我永远找不到在 gnome 终端中设置翻译的位置。
    • 这取决于您拥有的特定终端仿真器。你有哪一个?
    • “PC-Style Function Keys”有第二个表格,上面写着“Home 是 CSI H,End 是 CSI F”。 CSI 恰好在一开始就被描述为“ESC [ Control Sequence Introducer (CSI is 0x9b)”。所以这基本上是您最初示例的四个中的两个。 "^[[H" == "ESC[H" = "CSI H"。因此 xterm 将 Home 按键转换为 ^[[H ,zsh 将其解释为行首。 “CSI 1 ~”和“CSI 4 ~”被描述为 VT220 的 6 键键盘的 Home 和 End。要获取 zsh 绑定的完整列表,请参阅“man zshzle”并输入“bindkey -M emacs”。
    • 为什么不能有人创建一个不同键映射的列表,从 common 或人们喜欢的 shell 开始,然后其他人可以贡献。我仍然不明白如何反向查找我目前拥有的内容!例如\e[3~^[OH 等等等等!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2023-03-20
    • 2023-02-19
    • 2012-02-05
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多