zsh 終端機是否使用規範模式?

zsh 終端機是否使用規範模式?

我一直在探索terminfostty。如果我運行,stty -a|grep icanon似乎已設定規範模式,但如果我嘗試將其關閉stty -icanon並再次檢查,我發現它仍然設定。當我在 bash 下做同樣的事情時,我可以停用 icanon,但我沒有註意到行為有任何變化。所以我有兩個問題;為什麼我無法在 zsh 中停用 icanon,如果可以的話,它會如何影響行為?

答案1

當我在 bash 下做同樣的事情時,我可以停用 icanon,但我沒有註意到行為有任何變化。

那是因為 bash 轉變了規範模式離開當讀取使用者的命令時(為了能夠實現終端驅動程式未提供的行編輯功能 - 例如插入文字、使用箭頭鍵左右移動遊標等),然後恢復運行任何命令列時的先前終端設定。

若要查看其效果,請執行外部命令,例如cat

bash$ stty -icanon
bash$ cat
hheelloo

每個鍵都會重複,一次因為stty echo打開,一次因為cat將立即讀取它並寫回,而不必等待完整的行。

[使用 zsh] 如果我嘗試將其關閉stty -icanon並再次檢查,我會發現它仍然設定。

當如上所述恢復先前的終端設定時,zsh也強制執行一些合理的預設值(包括echoicanon設定)。可能是因為它假設,如果命令離開規範模式離開終止後,這只是一個意外(例如,當全螢幕應用程式崩潰viless崩潰時)。

我無法找到任何zsh可以使其像bash使用 readline 庫的其他程式一樣工作的選項,但是如果您想在運行命令之前關閉 icanon 模式,您可以透過從相同的命令列:

zsh$ stty -icanon; cat
hheelloo

相關內容