我在vimdoc中碰到一个句子:
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时,它也挂了manless是输出寻呼机)。
那么,有人可以告诉我发生了什么吗?
经过测试的是xtermlxterminaltty也有此问题。在所有情况下,按Ctrl + q都可以断开终端。

评论

这可能是一个愚蠢的问题,但您没有提及您在问题中尝试过的内容。您尝试过使用C-q重新启用滚动功能,对吧?

@ h3rrmiller是的,是的。但是我只是想知道为什么ctrl -s导致进程挂起。

在出现带有滚动锁定键C-s和C-q的键盘之前,是过去的“滚动锁定切换”。您可以通过在.bashrc中添加stty ixany和stty ixoff -ixon来禁用此功能。

这是当今终端仿真器中的愚蠢历史设置。有关如何修复终端的信息,请参见此相关问题。

@IngoKarkat我不会说这很蠢...我仍然会不时使用它

#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