Ctrl-s 挂终端模拟器?

Hon*_*hen 371 vim man keyboard-shortcuts terminal emacs

我在vimdoc中看到一句话:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.
Run Code Online (Sandbox Code Playgroud)

并使用 CTRL-S 确实挂起我的 vim。我认为这是vims的错误,因为我在emacs nox中使用C-s/时没有问题C-x C-s。但是,刚才,当我阅读手册页并按下 时Ctrl-s,它也挂man了(less是输出寻呼机)。

那么,有人可以告诉我发生了什么吗?

我测试过的终端模拟器是xtermlxterminaltty也有这个问题。A Ctrl+q在所有情况下都会取消挂起终端。

h3r*_*ler 425

此功能称为软件流控制(XON/XOFF 流控制)

当数据链路的一端(在这种情况下是终端仿真器)无法接收更多数据(因为缓冲区已满或接近满或用户发送C-s)时,它将发送一个“XOFF”来告诉发送端数据链接暂停,直到收到“XON”信号。

在幕后发生的事情是“XOFF”告诉内核中的 TTY 驱动程序将发送数据的进程置于睡眠状态(如暂停电影),直到 TTY 驱动程序被发送一个“XON”来告诉内核来恢复进程,就好像它从来没有停止过一样。

C-s启用终端滚动锁定。这可以防止您的终端滚动(通过发送“XOFF”信号来暂停软件的输出)。

C-q禁用滚动锁定。恢复终端滚动(通过发送“XON”信号来恢复软件的输出)。

此功能是遗留的(当终端速度非常慢且不允许滚动时)并且默认启用。

要禁用此功能,您需要在~/.bash_profile或 中执行以下操作~/.bashrc

stty -ixon
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我认为它最终可以追溯到 70 年代,如果不是 60 年代的话。 (12认同)
  • “stty -ixon” <----- 这是我上周在互联网上读到的最重要的内容之一。谢谢你。 (4认同)

Ste*_*and 32

在我的.bashrc脚本末尾,我添加了:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
Run Code Online (Sandbox Code Playgroud)

编辑:随着时间的推移,我已经从我的配置中删除了这一行,因为我最终发现使用 Ctrl-S 冻结终端输出并使用 Ctrl-Q 恢复它很方便。它不是每天都有用,但很高兴拥有。