我试图理解为键盘组合键生成十六进制代码序列的方法。所以我可以使用它们将特定的密钥发送到运行在tmux中的vim会话,该会话在iTerm2内通过"发送十六进制代码" iTerm2的功能。然而,这变得非常混乱。
我从这篇文章开始:iTerm2 keymaps for tmux
因此,作为常量和起点,我知道CTRL-b
可以表示为0x02
的十六进制代码。
我测试了它,并且它有效,当我将它映射到iTerm2中的任何随机键时,我可以看到它被发送到tmux CTRL-b
但我怎么知道其他组合键的十六进制代码,例如SHIFT-F10的十六进制代码是什么?还是CTRL-F5?还是CTRL-m-Space?
我在这里问了一个与这个问题有关的问题: Key escape sequences not working for tmux
答案 0 :(得分:9)
您可以使用命令行工具xxd
。它从STDIN
读取,并在原始输入旁边输出十六进制转储,如下所示:
$ echo -n "hello world" | xxd
0000000: 6865 6c6c 6f20 776f 726c 64 hello world
要知道的另一个方便的技巧是,如果要直接输入控制字符,通常可以通过Ctrl-V
(^V
)为键添加前缀来切换到临时“原始模式” 。例如,要获取代表Ctrl-b
的十六进制代码,请运行xxd
,点击Ctrl-v
,然后点击Ctrl-b
,然后Enter
(以便在视觉上将输入与xxd
的输出,然后Ctrl-d
发送EOF
:
$ xxd
^B
0000000: 020a ..
输出可以解释如下:
0000000
)是偏移量20
,代表^B
0a
(LF
)在Linux上测试F5和Shift-F5,在tmux中:
$ 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