如何在从文件管理器或通过快捷方式启动的终端应用程序中禁用 Ctrl+S?

如何在从文件管理器或通过快捷方式启动的终端应用程序中禁用 Ctrl+S?

我已使用说明成功在终端中禁用了Ctrl+S这里。但是,如果我启动一个终端来自“终端外部”的程序(即终端 vim),Ctrl+S仍然冻结屏幕。

我所说的“在航站楼外”是什么意思:

  • 使用键盘快捷键运行类似kitty -e vim在终端中打开 vim 的命令
  • 使用vim服务器从文件管理器启动终端 vim,最终的作用与上面相同

有没有解决的办法? (除了忘记用Ctrl+不断保存的习惯S;)

(有一些原因我不能也不想使用 gVim。stty -ixon从 vim 内部运行是行不通的,而且我确信有充分的理由不这样做——我还不太熟悉 stty...)

答案1

将其添加到您的~/.vimrc

silent !stty -ixon

如果这会在非 tty 上产生问题vimgvim不知道,无法测试它),请尝试以下操作:

silent !test -t 0 && stty -ixon

看起来像他们决定-ixon在最近版本的 vim 中设置默认值,因此这很快将不再是 vim 的问题(请注意,来自 vim 创始人的原始补丁问题是未经测试的垃圾,但最终修补做对了)。

一般来说(对于其他程序),没有通用的解决方案;-)

xterm 有一个ttyModes资源(和-tm选项),可用于设置初始模式,但它不会不是支持-ixon。我认为kitty连这个都没有。


从 vim 内部运行stty -ixon不起作用

这是因为vim在通过 运行外部命令之前恢复终端的初始(通常是非原始)状态:!command,然后在回复“按 ENTER 或键入命令”提示时将其更改回原始模式,因此执行的任何更改command都会丢失。


需要额外说明的是,在该网站和其他地方传播的常见民间传说(“ ^S/”只是从“和”^Q之前的时间遗留下来的不合时宜的内容)是错误的;软件流控制是你的事情lesstmux必须在任何串行线上使用没有RTS/CTS 带外信令(尤其在高波特率的线路上),以及在任何类型的虚拟 tty 上完全无用的东西。

IXON对于那些使用实际串行线连接到设备的人来说,盲目关闭(在这种情况下是通过本地 tty 上的 ssh 客户端)可能会导致的问题。大多数调用(或精确复制它)的程序cfmakeraw必然会以同样的方式失败(script(1)这是我想到的第一个)。

相关内容