Terminal

如何在從文件管理器或通過快捷方式啟動的終端應用程序中禁用 Ctrl+S?

  • October 10, 2021

我已經使用此處的說明在終端中成功禁用了Ctrl+ 。但是,如果我從“終端外部”啟動終端程序(即終端 vim),+仍然會凍結螢幕。S``Ctrl``S

我所說的“在終端之外”是什麼意思:

  • 使用鍵盤快捷鍵執行類似kitty -e vim在終端中打開 vim 的操作
  • 使用vimserver從文件管理器啟動終端 vim,最後幾乎和上面一樣

有沒有解決的辦法?(除了改掉用Ctrl+不斷儲蓄的習慣S;)

(我不能也不想使用 gVim 是有原因的。stty -ixon從 vim 內部執行是行不通的,我敢肯定有充分的理由不這樣做——我對 stty 還不是很熟悉……)

將此添加到您的~/.vimrc

silent !stty -ixon

如果這會產生非 tty 之vim類的問題gvim(不知道,無法對其進行測試),請嘗試以下操作:

silent !test -t 0 && stty -ixon

看起來他們決定-ixon在最近版本的 vim 中設置預設值,所以這很快就會不再是 vim 的問題(請注意,問題發起者的原始更新檔是未經測試的垃圾,但最終更新檔是正確的)。

通常(與其他程序一起),沒有通用的解決方案;-)

xterm 有一個ttyModes資源(和-tm選項),可用於設置初始模式,但支持-ixon. 我認為kitty甚至沒有。


從 vim 內部執行stty -ixon不起作用

這是因為vim在通過 執行外部命令之前恢復終端的初始(通常是非原始)狀態:!command,然後在回复“按 ENTER 或鍵入命令”提示時將其更改回原始模式,因此執行的任何更改command都將失去。


作為額外的說明,在這個網站和其他地方傳播的常見民間傳說(這^S/只是從之前的時間和等^Q的不合時宜的遺留物)是錯誤的;軟體流控制是您必須在沒有RTS/CTS 帶外信號的任何串列線路上使用的東西(尤其是在具有高波特率的線路上),並且在任何類型的虛擬 tty 上完全沒用。less``tmux

看到這個問題只是盲目地IXON關閉(在這種情況下由本地 tty 上的 ssh 客戶端)可能導致人們使用實際的串列線路連接到他們的設備。大多數呼叫cfmakeraw(或完全複製它)的程序必然會以同樣的方式失敗(script(1)這是第一個想到的)。

引用自:https://unix.stackexchange.com/questions/670770