我正在读书此消息来自 zsh 邮件列表关于按键绑定,我想知道我需要按哪个键:
^X^I
(我认为Ctrl-X
Ctrl-I
,首都X
和I
)^[^@
(我认为Ctrl-Esc-@
??)^X^[q
(我认为Ctrl-X
Esc-q
??)^XQ
(我认为Ctrl-X
和Q?)
^[[1;3A
^[[1;3D
从bindkey
^[[1;5C
^[[A
我知道这^[
意味着 Esc,但我不知道如何找到其他的。有没有列出这些的官方参考资料或网站?
答案1
^c
Ctrl是+的常用符号,c其中C是一个(大写)字母或其中之一@[\]^_
。它指定了相应的控制字符。对应关系是,控制字符的数字代码是可打印字符(字母或标点符号)的数字代码减64,相当于在基数2中设置一位为0。另外,^?
通常表示字符127。
有些键发送控制字符:
- Escape= Ctrl+[
- Tab= Ctrl+I
- Return(或Enter或⏎)= Ctrl+M
- Backspace= Ctrl+?或Ctrl+ H(取决于终端配置)
Alt(通常这样称呼Meta,因为这是历史 Unix 机器上该位置的键的名称)加上一个可打印字符发送^[
(转义),后跟该字符。
大多数功能键和光标键都会发送转义序列,即字符^[
后跟一些可打印字符。详细信息取决于终端及其配置。对于 xterm,默认值记录在手动的。该手册不适合初学者。以下是一些有帮助的提示:
- CSI 的意思是
^[[
,即转义后跟开括号。 - SS3 表示
^[O
,即转义符后跟大写-O。 - “应用程序模式”是全屏程序通常会打开的模式。由于历史原因,某些键在此模式下发送不同的转义序列。 (实际上有多种模式,但我不会详细讨论,因为在实践中,如果重要的话,您可以绑定两种模式的转义序列,因为不存在冲突。)
- 修饰符 ( Shift, Ctrl, Alt/ Meta) 由数字代码表示。在转义序列的最后一个字符之前插入分号和该数字。以文档中的示例为例:F5发送
^[[15~
和Shift+F5发送^[[15;2~
。对于发送^[[
和一个字母的光标键X, 表示修饰符中号,转义序列为。^[[1;MX
Xterm 遵循ANSI标准它本身基于可追溯到物理终端的历史使用情况。大多数现代终端仿真器都遵循 ANSI 标准并实现部分但不是全部的 xterm 扩展。不过,终端之间会有细微的差异。
因此:
^X^I
= Ctrl+ X Ctrl+ I= Ctrl+X Tab^[^@
= Ctrl+ Alt+ @= Escape Ctrl+ @。在大多数终端上,Ctrl+Space也会^@
发送^[^@
= Ctrl+ Alt+ Space= Escape Ctrl+ Space。^X^[q
= Ctrl+ X Alt+ q= Ctrl+X Escape q^XQ
= Ctrl+ X Shift+q^[[A
=Up^[[1;3A
= Alt+ Up( Up, with表示修饰符1;M
中号)。请注意,许多终端实际上并不发送Alt+的这些转义序列cursor key。^[[1;3D
= Alt+Left^[[1;5C
= Ctrl+Right
没有通用、方便的方法来查找与转义序列对应的键。相反,在 shell 提示符下(或在许多基于终端的编辑器中)按Ctrl+V后跟一个和弦,会按字面意思插入转义序列。
也可以看看键盘输入和文本输出如何工作?和键绑定表?
答案2
继续吉尔斯提到的信件:
对应关系是,控制字符的数字代码是可打印字符(字母或标点符号)的数字代码减64,相当于在基数2中设置一位为0。
你可以在ascii(7)
。查看八进制数:
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
...
077 63 3F ? 177 127 7F DEL
^H
对应于退格字符、^M
回车符、^J
换行符、^I
制表符、^[
转义符等。
答案3
^ 字符代表控制键。 ^[ 产生 ESCAPE 或 ASCII 27。在此上下文中大写通常并不重要,并且 ^A 与 ^a 含义相同,即与“a”键同时按下的控制键。
^[^@ 表示 ESCAPE 后跟 control-@(根据键盘布局,您可能必须同时按 Shift 或 Alt-Gr 才能产生“@”)。
^X^[q 表示 control-x 后跟 ESCAPE 后跟 q。
^[[1;5C 表示 ESCAPE 后跟字符串“[1;5C”。对我来说,这看起来像一个终端控制序列,它改变颜色、粗体、斜体等文本属性。
我不知道使用 ^ 来表示控制键是否标准化,但它是由维基百科页面。通过键入 ^[ 生成 ASCII 27 可能是由 VT100 等 DEC 终端首创的,并且现在可能已成为标准。