如何在 iTerm2 中找到键的 ESC 序列的正确组合

How to find the correct combination for a key's ESC sequence in iTerm2

我一直在尝试修复 iTerm2 中 MacVim 为 运行 的情况下的终端仿真器行为。在我的 Vim 设置中,我将以下组合键分配给各个操作:

F10, action_A
CTRL-F10, action_B
SHIFT-F10, action_C

当我在 iTerm2 中将这些组合与 Vim 一起使用时,SHIFT-F10 被正确解释为 action_A。但是,由于 esc 序列问题,模拟器无法区分 CTRL-F10F10

我注意到 iTerm2 配置为在按下 SHIFT-F10 时发送 Esc+[21;2~。因此,通过将相同的序列分配给 CTRL-F10,我设法强制 SHIFT-F10CTRL-F10 执行 action_CF10 执行 action_A.

这证明通过发送正确的 esc 序列,应该能够强制 iTerm2 区分不同的键。

问题是:如果 SHIFT-F10Esc+[21;2~ 关联,我们如何找到 CTRL-F10 关联的内容?如何找到代表 CTRL-F10 的 esc 序列?或者十六进制代码? (因为 iTerm2 提供了向终端会话发送十六进制代码的选项)

在 vim 的插入模式下,只需按 Ctrl+V 并按下按键。这将按字面意义插入转义符以及此组合键的其余控制代码。当您已经在编辑配置文件时,这很方便。

你可以类似地运行类似od -t x1的东西(对于十六进制转储)或者甚至只是猫,它不解释输入,只需在那里按下你的组合键:

$ od -t x1
^[[21~
0000000 1b 5b 32 31 7e 0a
0000006

$

(按一次或两次 Ctrl-D 退出)

Control-F10 可以作为“\e[21;5~”发送,使用操作 'Send text with special chars'。完整答案在这里:how do I know what CTRL-F10 is associated with?