我在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。我以为是vims的错,因为我在emacs nox中使用C-s
/时没有问题。C-x C-s
然而,刚才,当我阅读手册页并按下 时,它也Ctrl-s
挂起(是输出寻呼机)。man
less
那么,有人可以告诉我发生了什么事吗?
我测试过的终端模拟器是xterm
和lxterminal
。tty
也有这个问题。在所有情况下,A Ctrl+都会取消挂起终端。q
答案1
该功能称为软件流控制(XON/XOFF 流控制)
当数据链路的一端(本例中为终端仿真器)无法接收更多数据(因为缓冲区已满或接近满或用户发送C-s
)时,它会发送一个“XOFF”来告诉发送端数据链接暂停,直到收到“XON”信号。
幕后发生的事情是“XOFF”告诉内核中的 TTY 驱动程序将发送数据的进程置于睡眠状态(如暂停电影),直到 TTY 驱动程序发送“XON”来告诉内核恢复该进程,就好像它从未停止过一样。
C-s
启用终端滚动锁定。这会阻止您的终端滚动(通过发送“XOFF”信号来暂停软件的输出)。
C-q
禁用滚动锁。恢复终端滚动(通过发送“XON”信号恢复软件的输出)。
此功能是旧功能(当终端非常慢并且不允许滚动时)并且默认情况下启用。
~/.bash_profile
要禁用此功能,您需要在或中执行以下操作~/.bashrc
:
stty -ixon
答案2
在我的脚本末尾.bashrc
我添加了:
#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
编辑:随着时间的推移,我已经从我的配置中删除了这一行,因为我最终发现使用 Ctrl-S 冻结终端输出并使用 Ctrl-Q 恢复它很方便。虽然不是每天都有用,但拥有它还是很不错的。