当我使用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 + CCtrl + DCtrl + L.

因为CTRL + KEY组合被终端解释为不可打印的ASCII字符,并且是那些不可打印的,你需要一种方法来表示它们。

该约定源于支持ANSI的VT终端 ,用于表示CTRL + KEY组合,表示CTRL与插入符号( ^ )和KEYKEY

复制和粘贴终端时,最好分别使用快捷 Ctrl + InsertShift + Insert

这些是终端使用的更传统的快捷方式,但您会注意到在X图形环境中, Ctrl + InsertShift + Insert与相同的Ctrl + CCtrl + V相关联

在大多数终端中, Ctrl + C (由^C表示)用于停止进程的执行,因此使用该快捷方式粘贴将不起作用。

要快速复制和粘贴,可以通过突出显示要复制的文本来使用X的主缓冲区,然后在要粘贴它的位置单击鼠标中键。 无需键盘。

应该使用Ctrl + C而不是Shift + Ctrl + C ,因为在命令行中,它们执行相同的操作(而Ctrl + CShift + Ctrl + C更容易)。 在某些图形环境中,这可能不是真的,在这些环境中,GUI捕获一些击键并执行某些特殊操作,但如果击键真正发送到命令行,则没有区别。 这就是为什么按Ctrl + C可能会将^ C显示为大写字母C而不是小写字母C.命令行不区分您按下的是哪一个(大概可以判断为大写更容易阅读)。 信件也是如此; 对于其他角色, Shift可能会产生影响。)

CtrlC发送ASCII表中大写字母位置下方64位的ASCII码(比ASCII表中的小写字母位置小96)。 因此按Ctrlc (小写)发送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后显示的在线帮助的完整屏幕,也称为Ctrlg 。)