在终端中意外按下 Ctrl-S 后如何解冻?

imz*_*hev 864 terminal keyboard readline scrolling freeze

这种情况在我身上经常发生:在我(以不同的意图)按下Ctrl-S终端后,与它的交互(输入或输出)被冻结。这可能是一种“滚动锁定”或其他什么。

在此之后如何解冻终端?

(这个时候,我一直与apt-shell一个内bashurxvt-不是知道哪个人负责的特殊处理Ctrl-S:我和向后搜索命令的历史C-r,像往常一样readline的,但后来我想“回到" 以通常的方式转发历史——至少在 Emacs 中—— C-s( 1 , 2 , 3 ),但这导致终端冻结。好吧,滚动/分页以查看过去的事情在终端中仍然有效,但没有交互进程在那里运行。)

ak2*_*ak2 1035

Ctrl——Q

要完全禁用它,请坚持stty -ixon使用启动脚本。要让任何键让事情再次流动,请使用stty ixany.

ps:执行此操作的既不是终端也不是外壳,而是操作系统的终端驱动程序。

  • Ctrl-C 确实有效,但它也会发送一个中断信号,这是人们通常不想要的。(顺便说一句,用于这些东西的键都可以通过`stty`进行配置。) (27认同)
  • 感谢上帝 !!多年来,这一直困扰着我。不知道为什么 VIM 没有将它实现为保存的本机快捷方式,而不是它所做的任何事情。很高兴知道有一个越狱,这是由于 CTRL+S(保存快捷方式)的自然使用而冻结的 VIM 屏幕,几乎适用于除 VIM 之外的所有应用程序。 (23认同)
  • 谢谢!顺便说一句,[那里](http://unix.stackexchange.com/questions/232/unix-linux-pranks/297#297)他们建议使用`Ctrl-C`;它也有效吗?(在[另一个地方](http://unix.stackexchange.com/questions/6890/what-is-making-my-cursor-randomly-disappear-when-using-gnome-temal/6896#6896),他们建议使用`Ctrl-Q`,就像你一样。) (10认同)
  • @SanuelJackson Ctrl-S“保存快捷方式”几乎适用于所有桌面应用程序,除了 vim。除了 Emacs。还有纳米。以及您可以在终端上运行的所有其他“应用程序”,正是因为终端已将其用于流量控制。这与您找不到使用 Ctrl-Alt-FN 快捷方式的 Linux 桌面应用程序的原因相同:因为它们已被系统使用。 (10认同)
  • @SamuelJackson 没有什么可以阻止您将 ctrl-s 绑定到 .vimrc 中的 :w 命令,例如参见此处:http://stackoverflow.com/a/11298171/2380702 (4认同)
  • @John 抱歉,我不是在“捍卫”任何东西,只是指出存在具有不同交互模式的不同生态系统(终端、桌面等)。这些生态系统以它们的方式运作,其历史和实际原因在今天仍然有效。我知道如果您不习惯它可能会很烦人。但认为无论上下文如何,做任何事情都应该只有一种方法显然是错误的。 (3认同)
  • @John 您使用 Ctrl-s (和 Ctrl-Q)来暂停(和恢复)终端上的长输出滚动,以便您可以阅读正在发生的事情。就是这样。确实,您可以使用 less 或 more 之类的寻呼机,但前提是您预计会有长输出,终端支持它们,并且系统可以运行它们(在某些紧急情况下可能无法运行)。此外,某些(硬件和软件)终端甚至不支持滚动,因此您无法滚动 bak 来阅读(串行控制台通常在嵌入式设备上使用)。所以请不要再抱怨一些你从未使用过、不理解的东西。 (3认同)
  • 我记得在我的 Apple ][ 克隆上尝试过这个组合,它也在那里工作 - `Ctrl-S`然后`Ctrl-Q`恢复。 (2认同)
  • 有趣的是,当 Emacs 在终端中运行时,Cs 不会冻结它。因此,这意味着 Emacs 更改此驱动程序设置,然后在退出时恢复它(或者让它以某种方式自动恢复)。因此,有时此设置似乎受到终端中运行的程序(可能是 shell 或 Emacs)的有意控制。 (2认同)
  • @SamuelJackson `:w` 比 Cs 快捷方式强大得多。您可以使用它保存到不同的命令,将缓冲区的内容通过管道传输到程序或写入不同的文件 - 所有这些都不能仅通过快捷方式实现。 (2认同)

RBe*_*eig 448

Ctrl——Q确实是答案。我想我会折腾一下这个太长的历史,无法放在ak2 正确答案的边缘。

在黑暗时代,终端是通过长电线或电话线连接到远程设备(最初是另一个终端,因为电传打字机比电报键更容易学习操作)的大型设备。到 Unix 开发时,ASCII 代码已经很成熟(尽管来自 IBM 的竞争性 EBCDIC 代码仍然是一股不可忽视的力量)。

最早的终端机保存了接收到的每个字符的打印记录。只要字符到达的速度不超过打印头可以输入它们的速度,至少。但是,一旦基于 CRT 的终端成为可能,问题就出现了,CRT 上只有大约 25 行,而 80 个字符的 25 行代表了足够的 RAM,以至于没有人认真考虑过为那些滚动到顶部的字符提供更多的 RAM。屏幕。

所以需要一些约定来表示发送端应该暂停以让读者跟上。

7 位 ASCII 码有 33 个码位专门用于控制字符(0 到 31 和 127)。他们有些有真正完善的目的,如NUL(空白纸带领导者线程,差距和接头),DEL(“划掉”在纸带上字符显示的冲压所有的七孔), BEL(丁!) CRLFTAB. 而是四个被明确定义的用于控制终端设备本身(DC1DC4又名CTRL + Q键,Ctrl + R键,Ctrl + S和Ctrl + T)。

我最好的猜测是,一些工程师认为(按照助记符的方式),“停止”的“S”和“继续”的“Q”还不错,并被指定DC3为“请停止发送”和DC1“好的” ,现在继续发送”。

甚至在 Unix 离开贝尔实验室的巢穴走向世界时,这种约定也已经很好地建立起来了。

该约定称为软件流控制,在实际串行设备中极为常见。正确实现并不容易,因为它阻止将这些字符中的任何一个用于通信通道中的任何其他目的,并且必须在任何未决接收字符之前处理停止信号以避免发送超过接收端可以处理。

如果可行,使用来自串行数据流的带外附加信号进行流量控制是非常可取的。在可以负担额外信号线的直接有线连接上,您会发现正在使用硬件握手,这可以释放这些字符以供其他用途。

当然,今天的终端窗口没有使用实际的物理串口,有滚动条,根本不需要软件握手。但约定俗成。

我记得 Richard Stallman 在 emacs 的第一个版本中收到了关于他将 Ctrl+S 映射到增量搜索的投诉的说法,并且他对任何必须依赖 7 位软件流控制连接的用户都相当冷漠。

  • 我曾经想知道为什么 DEL 有代码 127 而不是与其他控制字符组合在一起,直到我第一次使用一些纸带和 ASR33。一旦我意识到它具有冲出所有孔的效果,这意味着它可以在任何先前冲孔的角色上被过度击打以删除它,这是有道理的。 (31认同)
  • 非常感谢这段历史。我最近在我维护的终端模拟器中默认禁用了流量控制,但在仍然使用它的 Unix 传统主义者发出强烈抗议后不得不很快恢复它。我设置了 ixany 位,所以至少那些在不知道 ^Q 的情况下按 ^S 的人不会被卡住。 (15认同)
  • @SanuelJackson 自从我仔细观察已经有一段时间了,但是 Windows 附带的默认 vimrc 已将 <Cs> 映射到“:update”多年。我也相当确定我过去在 gvim 的一些发行版上也看到过它。但是,如果您在终端中使用 vim,这段历史仍然非常重要。现代终端仿真器仍然实现流控制键,因此即使 vim 映射它们,它也永远不会看到它们,除非每个用户都按照已接受的答案中的描述不遗余力地禁用流控制。 (4认同)
  • @CMCDragonkai 不。与“SIGCONT”和“SIGSTOP”完全无关。`SIGTSTP` 是由终端驱动程序在键入 `^Z` 时生成的,并且可以被忽略,不像 `SIGSTOP` 不能。没有击键发送`SIGCONT`,它是你的shell 中用于继续停止的作业的任何命令发送的信号。`^S` 和 `^Q` 键直接作用于终端驱动程序堆栈,通常不发送信号。 (4认同)
  • @RBerteig 我遇到了关于退格和删除的类似学习。Backspace 是正式的 ^H,delete 是 ^? 有些人喜欢 Emacs 开发人员(又是 Stallman?)希望 ^H 可用于通用目的,例如帮助之类的快捷方式。转义序列 ^[[3~ 或类似的东西是为了替换 ^? 退格键现在变成了旧的删除字符 ^?。事实上,我已经看到在 Linux 发行版上专门修补了 ncurses 以重新映射 terminfo 中的那些键,而 FreeBSD 上的 ncurses 未打补丁会导致一些令人讨厌的混乱,从而导致退格键不起作用。 (3认同)
  • 谢谢......非常有趣......我一直在想:为什么有人会选择*继续*一个带有“Q”的进程,它通常(现在)用于退出...... QRST分组解释了它...... .. (2认同)

Pre*_*raj 14

控制键:在 Shell 上执行特殊功能

  • Ctrl- S: 暂停显示
  • Ctrl- Q: 重新启动显示
  • Ctrl- C: 取消操作
  • Ctrl- U: 取消线路
  • Ctrl- D: 信号文件结束


归档时间:

查看次数:

492418 次

最近记录:

8 年,1 月 前