查找组合键的十六进制代码序列

mbi*_*nov 5 vim hex tmux

我试图了解为键盘组合键生成十六进制代码序列的方法.所以我可以使用它们通过iTerm2的"发送十六进制代码"功能将特定密钥发送到运行在iTerm2内部的tmux内的vim会话.然而,这变得非常混乱.

我从这篇文章开始:tmux的iTerm2键盘映射

因此,作为常量和起点我知道CTRL-b可以表示为十六进制代码0x02.

我测试了它,并且它有效,当我将它映射到iTerm2中的任何随机键时,我可以看到它被发送到tmux作为 CTRL-b

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

我在这里提出了另一个与此问题相关的问题: 密钥转义序列不适用于tmux

ato*_*ack 12

您可以使用命令行工具xxd.它从STDIN原始输入读取并输出十六进制转储,如下所示:

$ echo -n "hello world" | xxd
0000000: 6865 6c6c 6f20 776f 726c 64              hello world
Run Code Online (Sandbox Code Playgroud)

另一个方便的技巧是,如果你想直接输入一个控制字符,你通常可以通过Ctrl-V(^V)键前缀键来切换到一个临时的"原始模式" .例如,要获取表示Ctrl-b,运行xxd,命中Ctrl-v,Ctrl-b然后Enter(以便在视觉上将输入与xxd输出分开)的十六进制代码,然后Ctrl-d发送EOF:

$ xxd
^B
0000000: 020a                                     ..
Run Code Online (Sandbox Code Playgroud)

输出可以这样解释:

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

在Linux上测试F5和Shift-F5,在tmux中:

$ xxd
^[[15~
^[[25~
0000000: 1b5b 3135 7e0a 1b5b 3235 7e0a            .[15~..[25~.
Run Code Online (Sandbox Code Playgroud)

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

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

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

您也可以使用该tput命令,请参阅以下答案:https://unix.stackexchange.com/a/53589

  • `然后我们看到20,它代表^B`我认为`20`实际上是`02` (3认同)
  • 附录:改用`xxd -psg`,你不必输入`Ctrl+V`、`Ctrl-D`——只要输入你想要的,然后按回车键。请注意,输出将略有不同。来源:https://aaronaddleman.com/articles/hexcodes-and-iterm/ (2认同)