关于终端键盘输入, ctrl,alt,shift 做了什么?

这是我在折腾 vim 的时候发现的一个有趣问题: 我希望绑定 ctrl+/ 作为注释的快捷键, 可我发现我需要在配置里写成 ctrl+_

在求助网友的过程中, 我没有解决这个问题, 但我发现了更有趣的问题: 关于为什么 ctrl+i 是一个 tab, ctrl+[ 是一个 esc

这篇文章, 我们得到:

  • 终端中按下按键组合, 输入的也是 ASCII 码表中的字符
  • ctrl 的作用是: 把ASCII第7位变0
  • shift 的作用是: 把ASCII第6位变0 (因此 shift+a = A)
  • alt 的作用是: alt+a 等于先 esc 再 a

然后就容易解释了. 发现 ctrl+i 按照如此定义是一个 ), 这一般不太有用, 因此终端会把它处理成 ctrl+I, 即 00 01001, 一个 HT, 也就是 tab.

然后注意到 ctrl+[ 变成 00 11011, 即 ESC.