我无法使用任何基于控制台的文本编辑器,因为我的Ctrl+S
被控制台输出控制阻止了——Ctrl+S
通常意味着停止在控制台或终端下滚动,而我的屏幕正在吃掉那个键,而不是传递给我正在使用的基于控制台的文本编辑器(这通常情况下与保存文件关联)。
我无法证明这一点,直到我dte
今天安装了它,它有一个特殊的模式
-K Start in a special mode that continuously reads input and prints the name and numeric code of each pressed key.
这是我的输出:
$ dte -K
Press any key combination, or use Ctrl+D to exit
C-A 0x1000041
C-A 0x1000041
C-X 0x1000058
C-C 0x1000043
C-D 0x1000044
$ echo $TERM
screen
我们可以看到,甚至Ctrl+C
可以传递给文本编辑器,但是在此过程中我多次按下Ctrl+S
(然后 ),但它们都被我的屏幕吃掉了。Ctrl+Q
如何在屏幕内启用我的Ctrl+S
和Ctrl+Q
基于控制台的文本编辑器?
该机器是 Debian WSL:
$ uname -rm
4.4.0-19041-Microsoft x86_64
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
更新:
问题只出现在screen
.xterm
或xterm-256color
单独使用时就没问题:
$ dte -K
Press any key combination, or use Ctrl+D to exit
C-X 0x1000058
C-S 0x1000053
C-Q 0x1000051
C-C 0x1000043
C-D 0x1000044
$ echo $TERM
xterm
更新2:
确认man screen
确实screen
导致了问题:
C-a s, (xoff) Send a control-s to the current
C-a C-s; window.
------------------------------------------------------------------------
C-a q, (xon) Send a control-q to the current
C-a C-q window.
我发现文档关于它:
当流控制关闭时,屏幕会忽略 XON 和 XOFF 字符,这允许用户通过简单地键入它们将它们发送到当前程序(例如,对于 emacs 编辑器很有用)。
但我还没有找到如何默认关闭所有屏幕窗口的流量控制。
答案1
要在终端中禁用Ctrl+S和Ctrl+ Q
,请在脚本末尾添加此行.bashrc
:
stty -ixon
这stty 手册页
将该选项描述ixon
为:
[-]ixon
enable XON/XOFF flow control
关于这一古老特征存在的原因以及它与什么相关的解释可以在这篇优秀的文章中找到 回答:
早在计算机出现之前, 电传打字机(又名电传打字机,又名电传打字机)。可以认为它们与电报技术大致相同,但附带某种键盘和某种打印机。
因为在计算机首次被制造时电传打字机就已经存在,并且当时的计算机只有房间大小,所以电传打字机成为第一台计算机的便捷用户界面 - 输入命令,点击发送按钮,等待一段时间,命令的输出就会打印到您面前的一张纸上。
软件流控制 起源于这个时代——例如,如果打印机的打印速度赶不上电传打字机接收数据的速度,电传打字机可以向远端发送一个 XOFF 流控制命令 ( Ctrl+ ),说“暂时停止传输”,然后可以发送 XON 流控制命令 ( + ) 到远端说“我已赶上,请继续”。SCtrlQ
这种用法在 Unix 中仍然存在,因为现代终端仿真器正在模拟物理终端(如 vt100) 本身(在某些方面)模仿电传打字机。