答案1
^O
是一个表示特点,通常是您的终端在按Ctrl+ o(而不是按键)时发送的。在终端中,应用程序通过从/dev/tty*
设备文件读取字节流来获取输入/dev/pt*
,而不是通过处理键盘事件来获取输入,这些字节是当您按下某个键或组合键时终端发送的字节。
使用基于 ASCII 的系统上使用的基于 ASCII 的终端(目前的规范,尽管大多数系统/终端将其扩展为支持非美式英语字符),当您键入 时a,z终端会发送字节 97 到 122(或0x60 | letter
),代表ASCII 中的a
to字符;z
如果您在按住密钥的同时执行相同操作,它们会以ASCII 形式Shift发送字节 65 到 90 ( 0x40 | letter
) 。A
Z
使用 时Ctrl,它们发送字节 1 到 26 ( 0x00 | letter
1)。
现在,字节 0 到 31 是控制字符,它们没有字形、字体表示。他们有名字(参见man ascii
)。就像 9(在Ctrl+i或上发送⭾)是制表符,10 是换行符(在Ctrl+上发送j),13 是回车符(在Ctrl+m或上发送Enter,但要注意终端驱动程序经常将其转换为换行符)。
Ctrl+上发送的字符o是移入控制字符。如果nano
用<shift-in> Write Out
代替^O Write Out
,我敢打赌大多数人都不知道如何发送该控制字符。
^A
... ^Z
(^[
^\
^]
^^
^_
对于 27..31、^@
对于 0、^?
对于 127^)有时称为帽子符号是这些角色的常见视觉表现。您会发现它也是由cat -vt
或 之后的终端线路规则使用的stty echoctl
。
其他符号包括\CA
或\C-A
。某些控制字符在 C 字符串中具有表示形式,例如\n
for ^J
/newline、\a
for ^G
/BEL。
但^A
/\C-A
更有助于指示如何使用键盘生成它们。
1@
在 ASCII 中为 0x40,在?
0x3f 中为 0x40,因此该^X
字符可以通过 获得0x40 ^ X
,即 X 的字节值,第二个最高有效位被翻转。您还可以找到字节 0x80 到 0x9f 和 0xa0 到 0xff 的M-^X
和M-X
表示,仅 ASCII 终端用于在Meta+ Ctrl+X和Meta+上发送X,尽管现在它们宁愿发送 ESC ( ^[
) 后跟^X
/ X
,因为第 8 位用于代替非 ASCII 字符,我预计nano
这些天会期望^[U
而不是字节 0xd5 的意思,因为M-U Undo
字节 0xd5 也被发现作为亚美尼亚字符 U+0540 到 U+057F 的 UTF-8 编码的第一个字节,或者Õ
在 ISO8859 中-1(又名拉丁语1)