【问题标题】:Finding the hex code sequence for a key combination查找组合键的十六进制代码序列
【发布时间】:2016-07-19 04:31:21
【问题描述】:

我正在尝试了解为键盘组合键生成十六进制代码序列的方式。因此,我可以使用它们通过 iTerm2 的“发送十六进制代码”功能将特定密钥发送到在 iTerm2 内部的 tmux 内运行的 vim 会话。然而,这变得非常令人困惑。

我从这篇文章开始:iTerm2 keymaps for tmux

因此,作为一个常数和起点,我知道CTRL-b 可以表示为0x02 的十六进制代码。

我已经测试过了,它可以工作,当我将它映射到 iTerm2 中的任何随机键时,我可以看到它作为 CTRL-b 发送到 tmux

但是我如何知道其他组合键的十六进制代码,例如 SHIFT-F10 的十六进制代码是什么?还是 CTRL-F5?还是 CTRL-m-空格?

我在这里问了另一个与此问题相关的问题: Key escape sequences not working for tmux

【问题讨论】:

    标签: vim hex tmux


    【解决方案1】:

    您可以为此使用命令行工具xxd。它从STDIN 读取并在原始输入旁边输出一个十六进制转储,如下所示:

    $ echo -n "hello world" | xxd
    0000000: 6865 6c6c 6f20 776f 726c 64              hello world
    

    另一个方便的技巧是,如果您想直接输入控制字符,您通常可以通过在 key/s 前加上 Ctrl-V (^V) 来切换到临时的“原始模式”。例如,要获得代表Ctrl-b 的十六进制代码,运行xxd,点击Ctrl-v,然后点击Ctrl-b,然后点击Enter(在视觉上将输入与xxd 的输出分开),然后点击@ 987654334@发送EOF

    $ xxd
    ^B
    0000000: 020a                                     ..
    

    输出可以这样解释:

    • 第一列 (0000000) 是偏移量
    • 然后我们看到02,它代表^B
    • 接下来是0a (LF / \n)
    • 在最后一列中,我们看到原始输入对应于十六进制输出(在这种情况下,点表示不可见字符)

    在 tmux 内的 Linux 上测试 F5 和 Shift-F5:

    $ xxd
    ^[[15~
    ^[[25~
    0000000: 1b5b 3135 7e0a 1b5b 3235 7e0a            .[15~..[25~.
    

    因此解释 F5 - 我们看到 ESC (0x1b),后跟列出字符的十六进制表示,以 LF (0x0a) 结尾:

    • 5b,或 [ 符号
    • 31,或数字 1
    • 35,或数字 5
    • 7e,或 ~ 符号

    Shift-F5 可以类似地解释,除了 ANSI 序列使用 25 而不是 15。

    你也可以使用tput命令,看下面的答案:https://unix.stackexchange.com/a/53589

    【讨论】:

    • 感谢您的回答。我现在正在测试这个。我的问题是我没有从外部世界获得健康的信号流到终端世界。例如,在上面的例子中,在 iTerm2 中,当我运行 xxd -p 然后运行 ​​CTRL-v 后跟 F5 时,我得到 ^[[15~ 和一个十六进制代码。但是,当我执行CTRL-v 后跟CTRL-F5 时,我得到^[[15~ 和一个十六进制。所以结果完全一样。这真的很奇怪吗?! :(
    • 在 OSX 本地终端中,我得到 ^[[15~ 代表 F5^[[25~ 代表 SHIFT-F5 但没有 CTRL-F5,实际上是 CTRL-F5 输入后我得到 ^M .所以似乎所有这些终端都有自己的方式来解释键盘信号,这令人困惑。
    • 附录:改用xxd -psg,你不必输入Ctrl+VCtrl-D——只要输入你想要的,然后回车。请注意,输出将略有不同。来源:aaronaddleman.com/articles/hexcodes-and-iterm
    • then we see 20, which represents ^B 我认为20实际上是02
    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2018-11-28
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2012-06-20
    相关资源
    最近更新 更多