Terminal

Ctrl-s 掛起終端模擬器?

  • August 3, 2020

我在 vimdoc 中遇到過一句話:

Note: CTRL-S does not work on all terminals and might block
               further input, use CTRL-Q to get going again.

並且使用 CTRL-S 確實掛起我的 vim。我在想這是vims的錯,因為我在emacs nox中使用C-s/時沒有問題。C-x C-s但是,剛才,當我閱讀手冊頁並按 時Ctrl-s,它也掛起manless是輸出尋呼機)。

那麼,有人可以告訴我發生了什麼嗎?

我測試過的終端模擬器是xtermlxterminal. tty也有這個問題。A Ctrl+q在所有情況下都取消掛起終端。

此功能稱為軟體流控制(XON/XOFF 流控制)

當數據鏈路的一端(在這種情況下為終端仿真器)無法接收更多數據(因為緩衝區已滿或接近滿或使用者發送C-s)時,它將發送一個“XOFF”以告知發送端數據鏈路暫停,直到收到“XON”信號。

幕後發生的事情是“XOFF”告訴核心中的 TTY 驅動程序將發送數據的程序置於睡眠狀態(如暫停電影),直到向 TTY 驅動程序發送一個“XON”來告訴核心來恢復程序,就好像它從未停止過一樣。

C-s啟用終端滾動鎖定。這可以防止您的終端滾動(通過發送“XOFF”信號來暫停軟體的輸出)。

C-q禁用滾動鎖定。恢復終端滾動(通過發送“XON”信號恢復軟體的輸出)。

這個特性是遺留的(當終端非常慢並且不允許滾動時)並且預設啟用。

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

stty -ixon

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