Note: CTRL-S does not work on all terminals and might block
further input, use CTRL-Q to get going again.
,使用CTRL-S确实使我的vim挂了。我当时以为是病毒错误,因为在emacs nox中使用
C-s
/ C-x C-s
时没有问题。但是,刚才,当我阅读手册页并按Ctrl-s
时,它也挂了man
(less
是输出寻呼机)。那么,有人可以告诉我发生了什么吗?
经过测试的是
xterm
和lxterminal
。 tty
也有此问题。在所有情况下,按Ctrl + q都可以断开终端。#1 楼
此功能称为软件流控制(XON / XOFF流控制)当数据链接的一端(在这种情况下为终端仿真器)无法接收更多数据(因为缓冲区已满)或接近满或用户发送
C-s
),它将发送“ XOFF”以告知数据链路的发送端暂停,直到接收到“ XON”信号为止。 实际情况是,“ XOFF”告诉内核中的TTY驱动程序将正在发送数据的进程置于睡眠状态(例如暂停影片),直到TTY驱动程序处于发送了一个“ XON”以告知内核恢复该过程,就好像它从未停止过一样。
C-s
启用终端滚动锁定。这样可以防止您的终端滚动(通过发送“ XOFF”信号来暂停软件的输出)。C-q
禁用滚动锁定。恢复终端滚动(通过发送“ XON”信号以恢复软件的输出)。此功能是旧功能(当终端非常慢且不允许滚动时返回),默认情况下启用。
要禁用此功能,您需要在
~/.bash_profile
或~/.bashrc
中添加以下内容:stty -ixon
评论
实际上,我认为它可以追溯到70年代,如果不是60年代的话。
–基思
13年4月11日在18:17
但是,它似乎无法在Ubuntu 16.04上运行。
–罗伯特
17年11月23日在2:32
“ stty -ixon” <-----这是上周我在互联网上阅读的最重要的内容之一。谢谢。
– Brad P.
19年1月23日在13:08
实际上,其历史早于80年代开始了几十年。参见神秘的TTY。
–RoboAlex
19年2月4日在8:41
如果出于某种原因-您全局重新映射(“未激活”)Ctrl-Q(例如,以避免意外退出Firefox),则在您的〜/ .bashrc中添加stty -ixon会在终端中启用Ctrl-q。就我而言,Ctrl-s冻结了Vim,直到我对.bashrc进行了修改,我还是无法回到它。此处详细信息:superuser.com/a/1328326/409327
–维多利亚·斯图尔特(Victoria Stuart)
3月1日18:47
#2 楼
在我的.bashrc
脚本的结尾,我添加了:使用Ctrl-Q它每天都没有用,但是很高兴。评论
出于好奇,您在哪种情况下会使用它?我正打算将其添加到bashrc中,但是您对此深感兴趣。
–ram
8月27日0:50
不记得我上次使用它了。可以将其想象为按下音乐播放器上的“暂停”键。
–斯蒂芬·罗兰(Stephane Rolland)
8月27日9:36
评论
这可能是一个愚蠢的问题,但您没有提及您在问题中尝试过的内容。您尝试过使用C-q重新启用滚动功能,对吧?@ h3rrmiller是的,是的。但是我只是想知道为什么ctrl -s导致进程挂起。
在出现带有滚动锁定键C-s和C-q的键盘之前,是过去的“滚动锁定切换”。您可以通过在.bashrc中添加stty ixany和stty ixoff -ixon来禁用此功能。
这是当今终端仿真器中的愚蠢历史设置。有关如何修复终端的信息,请参见此相关问题。
@IngoKarkat我不会说这很蠢...我仍然会不时使用它