当我使用Ctrl +字符键盘快捷键时,为什么^ C,^ V等出现在终端中?
有时,当从命令输出中复制粘贴文本时,我会意外地使用Ctrl + c而不是Ctrl + Shift + c 。
所以命令行将其解释为^C
…
为什么是这样? 为什么命令行将控制输入解释为^
?
它实际上并不插入字符序列“^ C”。 这仅表示不可打印的ASCII控制字符,例如:
-
^C
→ETX(文本结束,发送一个终止信号),ASCII 0x03 -
^D
→EOT(传输结束,终止输入),ASCII 0x04 -
^H
→BS(退格,\b
),ASCII 0x08 -
^J
→LF(换行,\n
),ASCII 0x0A -
^L
→FF(换页,新页面,清除终端),ASCII 0x0C -
^M
→CR(回车符,\r
),ASCII 0x0D
这只是可以使用键盘插入的可能ASCII控制字符的一小部分; 你可以在这里找到完整的清单。
我认为最值得记住的是Ctrl + C , Ctrl + D和Ctrl + L.
因为CTRL + KEY组合被终端解释为不可打印的ASCII字符,并且是那些不可打印的,你需要一种方法来表示它们。
该约定源于支持ANSI的VT终端 ,用于表示CTRL + KEY组合,表示CTRL与插入符号( ^
)和KEY与KEY 。
复制和粘贴终端时,最好分别使用快捷 键 Ctrl + Insert和Shift + Insert 。
这些是终端使用的更传统的快捷方式,但您会注意到在X图形环境中, Ctrl + Insert和Shift + Insert与相同的Ctrl + C和Ctrl + V相关联 。
在大多数终端中, Ctrl + C (由^C
表示)用于停止进程的执行,因此使用该快捷方式粘贴将不起作用。
要快速复制和粘贴,可以通过突出显示要复制的文本来使用X的主缓冲区,然后在要粘贴它的位置单击鼠标中键。 无需键盘。
您应该使用Ctrl + C而不是Shift + Ctrl + C ,因为在命令行中,它们执行相同的操作(而Ctrl + C比Shift + Ctrl + C更容易)。 在某些图形环境中,这可能不是真的,在这些环境中,GUI捕获一些击键并执行某些特殊操作,但如果击键真正发送到命令行,则没有区别。 这就是为什么按Ctrl + C可能会将^ C显示为大写字母C而不是小写字母C.命令行不区分您按下的是哪一个(大概可以判断为大写更容易阅读)。 信件也是如此; 对于其他角色, Shift可能会产生影响。)
按Ctrl – C发送ASCII表中大写字母位置下方64位的ASCII码(比ASCII表中的小写字母位置小96)。 因此按Ctrl – c (小写)发送ASCII代码3(比大写C的ASCII代码67小64)。 在许多环境中,您可以按住Alt ,然后在小键盘上按3 (然后释放3键,然后释放Alt键),您可能会获得相同的效果。
关于^ C,^只是“ Ctrl ”键的一个众所周知的简写。 同样,M-是“ Alt ”键的简写。 呃,是的 M代表单词“Meta”,可以通过按住Alt并按下接下来的任何内容,或者有时按Esc (并释放Esc )然后按下接下来的任何内容来输入。 维基百科关于“控制键”的文章:“符号”部分将其描述为“传统符号”。 这也称为Caret Notation( 维基百科关于Caret表示法的文章 , Unix StackExchange:ryvnf关于Caret Notation的问题 )。
关于最后一个问题,命令shell不是“解释”任何东西作为插入符号。 换句话说,shell没有读任何东西,并且认为它是一个插入符号。 发生的事情是shell正在使用众所周知的插入符号表示输出。 作为另一个例子,您可以看到着名的寻呼机“less”,通过运行使用插入符号: dd if=/dev/zero bs=64 count=1 | less
dd if=/dev/zero bs=64 count=1 | less
(“nano”文本编辑器也在其在线帮助中使用插入符号,包括按^ G后显示的在线帮助的完整屏幕,也称为Ctrl – g 。)