用于撤销的 Ctrl+/ (^/) bash 快捷键在哪里定义的?

用于撤销的 Ctrl+/ (^/) bash 快捷键在哪里定义的?

bind -p我在和 中都找不到映射stty -a。另外,它仅适用于我尝试过的终端模拟器(xterm、konsole、gnome-terminal),而不适用于 Linux 系统控制台。我认为它传统上是一个 emacs 映射。

编辑:当我输入^V^/bash prints时^_,它被映射到绑定中的撤消。但是^/映射到哪里呢^_

答案1

它是由终端仿真器生成的(它确实获取原始 X 事件并生成字节流,并且伪终端处理没有修饰键的概念,^_是代码 037 的控制字符)。

这个映射的起源可能是在 VT100 中映射的和 都CTRL-?映射CTRL-/到字符 037,但显然没有映射CTRL-_到任何内容。我尝试过将终端模拟器映射CTRL-?到 177 或 037。

VT220做了其他事情,但它的一些映射至少在 XTerm 中仍然可用。

答案2

作为一般规则,control修饰符通过删除最后 5 位的所有字符来作用于 ASCII 字符。它将几个不同的字符映射到0..31用于 ASCII 控制字符的范围。

根据该规则,人们会期望使用修饰符将它们映射到 031 control

037   31    1F    US  (unit separator)
077   63    3F    ?
137   95    5F    _
177   127   7F    DEL

这些不会:

057   47    2F    /
117   79    4F    O
157   111   6F    o

或者,control修饰符可以仅适用于范围内的字符32..63,使用键的类比shift,该键在 ASCII 中用于将范围映射64..9496..126(大写/小写字母)。在这种情况下,这些可能映射到031

037   31    1F    US  (unit separator)
057   47    2F    /
077   63    3F    ?

而且(已经有一段时间了),@aprogrammer 的观察听起来很熟悉。但VT100手册中没有。在第3章,它指向一个记录键及其控制等效项的表。它使用完整 95 个字符范围 (32..126) 中的代码,但仅记录每个控制字符的一种情况。其他可能的字符都没有记录。但要注意表文件control?。我的键盘上?有一个转移钥匙。我找到的 VT100 键盘的图片中没有将其作为未移动的键。并且(毫不奇怪)该特定键的未移位代码是/。 DEC 可能已经根据早期终端的现有密钥记录了这些内容,但他们这样做也可能是为了保持表格简短。

然而,转换并不完全达到xterm。它接收具有特定键码以及修饰符信息的 X 事件。一般来说,这些键码对应于键盘上显示的字母,而修饰符(例如shift和 )control是单独传递的。 xterm使用 X 运行时函数,例如Xutf8LookupStringXmbLookupString组合一些事件(例如shift)。这就是决定翻译的地方这些控制字符。 xterm稍后细化/修改信息特殊键(例如backspace),但大部分转换是在 X 库中使用键盘配置完成的。

进一步阅读:

相关内容