Ctrl- Q确实是答案。我以为我会花一点时间来解决这个问题,因为这段历史太长了,无法满足ak2正确答案的范围。
早在黑暗时代,终端就是通过长线或通过调制解调器的电话线连接到远程设备(起初是另一个终端,因为电传打字比电报键更容易学习)的大型设备。到Unix开发之时,ASCII代码已经很成熟(尽管来自IBM的竞争EBCDIC代码仍然不容小a)。
最早的终端保留了每个收到字符的打印记录。只要字符到达的速度至少不超过打印头可以键入的速度。但是,一旦基于CRT的终端成为可能,就会出现问题,即CRT上只能容纳25行,而25行的80个字符表示足够的RAM,没有人认真考虑过要为滚动到屏幕顶部的字符提供更多的RAM。屏幕。
因此,需要采取一些惯例来表明发送端应暂停以使读者赶上。
7位ASCII码具有33个代码点,专用于控制字符(0至31和127)。他们有些有真正完善的目的,如NUL
(空白纸带领导者线程,差距和接头),DEL
(“划掉”,由冲压所有的七个孔表示在纸带上的字符), BEL
(丁!) CR
,LF
和TAB
。而是四个被明确定义的用于控制终端设备本身(DC1
以DC4
又名CTRL + Q键,Ctrl + R键,Ctrl + S和Ctrl + T)。
我最好的猜测是,一些工程师认为(随着助记符的发展),“ S”代表“停止”,“ Q”代表“继续”并不太糟糕,并被分配DC3
为“请停止发送”和DC1
“确定” ,请立即继续发送”。
甚至在Unix离开Bell Labs进入世界时,这种约定已经很好地确立了。
该约定称为软件流控制,在实际的串行设备中极为常见。正确实现并不容易,因为它会阻止将这些字符中的任何一个用于通信信道中的任何其他目的,并且必须在任何未决的已接收字符之前处理停止信号,以避免发送超出接收端能力的字符。处理。
如果可行,使用串行数据流的带外附加信号进行流量控制是非常可取的。在可以负担额外信号线的直接有线连接上,您会发现正在使用硬件握手,这将释放这些字符以供其他用途。
当然,今天的终端窗口没有使用实际的物理串行端口,没有滚动条,并且根本不需要软件握手。但是惯例仍然存在。
我回想起理查德·斯托曼(Richard Stallman)在其emacs的第一个发行版中收到的有关其将Ctrl + S映射到增量搜索的投诉,并且他对必须依赖7位软件流控制连接的任何用户都表示同情。
vim
然后按Ctrl-S保存编辑。嗯,哦XD