CTRL+C:复制或中断

CTRL+C:复制或中断

在 Linux 和 Windows CTRL +中 C 都有两种截然不同的含义,具体取决于您使用的程序。在某些程序(主要是 GUI 程序)中,它意味着“复制”,而在其他程序(几乎所有命令行工具)中,它意味着“中断”或“退出”。

这对于从使用 GUI 转向使用命令行的人来说尤其麻烦,因为“复制”是完全安全的操作,而中断可能会杀死您当前正在使用的程序,从而可能破坏您的工作。

造成这种分歧的原因是什么,或者根源在哪里?

答案1

Ctrl+的“kill”含义C非常古老,我认为甚至比 Unix 还要古老。维基百科追溯到 TOPS-10,可以追溯到 20 世纪 60 年代末。该文章解释了为什么Ctrl+C是一个合理的选择:ASCII码,出版于1963年,对应的人物是ETX,文本结尾。缺少表示“停止”的字符,表示“该段输入结束”的字符是表示“停止当前处理”的合理选择。

Ctrl+的“复制”含义C来自Xerox PARC,现代形式复制粘贴的发明者(以及图形用户界面的大多数其他基础知识)。我不知道具体是什么时候,但一定是 20 世纪 70 年代末。用户体验堆栈交换上的此线程讨论按键绑定的选择; C 代表复制很有意义。

PARC 没有理由根据 TOPS-10 和 Unix 终端中的现有含义拒绝复制Ctrl+ 。C那时的操作系统和应用程序更加多样化,使用计算机的人也少得多。没有机会也没有要求为所有应用程序的键绑定制定单一标准。Ctrl+在流行应用程序中的其他用途C包括在词之星² 以及 Emacs 中特定于模式的命令。所有这些都是独立设计的,适用于具有不同需求、在不同环境中运行的应用程序。

您可以使用以下命令配置终端键绑定stty命令。当终端处于“cooked”模式时,终端绑定处于活动状态。例如,该命令stty intr ^G将发送 SIGINT 信号的字符设置为Ctrl+G而不是Ctrl+ C。角色^G贝尔以 ASCII 表示;当发送到终端时,它的意思是“按铃”。它是 Emacs 用于“中断当前操作”的字符(原理:应用程序通过终端向用户发送 BEL 来中断用户;用户通过终端向应用程序发送 BEL 来中断应用程序)。当发送到终端时,它没有标准含义。

大多数 shell 都提供行编辑功能,因此它们将终端设置为原始模式。全屏文本模式应用程序也是如此。您可能需要将这些应用程序配置为识别Ctrl+G而不是Ctrl+ C,并且某些应用程序可能具有不可配置的键绑定。因此,更改中断字符可能可行,也可能不可行,具体取决于您使用的应用程序。

另一种方法是配置您的终端以更改它为Ctrl+C键组发送的字节序列,或者让它不发送任何内容,而是执行复制操作。您还可以选择不同的键组来发送Ctrl+ C(如果您有非笔记本电脑键盘,您可以使用偏僻的Pause/Break键)。并非所有终端都可以以这种方式配置。

1 Ctrl-S (XOFF) 表示停止,但它是发送给终端的,而不是发送给应用程序的。
² +旁边表示下一行,+和+表示上一行和向上翻页;选择这些键是因为它们位于 QWERTY 键盘上。CtrlXCtrlECtrlR
³ Nitpick:cooked 模式是一组终端设置,包括几个字符的解释,其中包括发送中断信号的字符。

相关内容