Command-Line
Kitty 中多行命令的奇怪輸出?
我在 VMWare 14.0 上執行非 GUI ArchLinux。我在上面安裝了一個 ssh 伺服器(通過 openssh)並在 Windows 10 上使用Kitty 0.70連接到我的虛擬機
$$ Version 10.0.15063 $$. 我的問題是:當我使用多行命令時,Kitty 中的命令輸出真的很奇怪。
例如:
在 Kitty ssh 客戶端上:
[ddk@mylinux:~] 14:23:08 $ if [[ -o interactive ]] if> then then> echo 'inter' then> fi then # not my typing echo 'inter' # not my typing fi)inter # not my typing [ddk@mylinux:~] 14:23:34 $
在我的虛擬機的終端上:
[ddk@mylinux:~] 14:23:54 $ if [[ -o interactive ]] if > then then > echo interactive then > fi interactive [ddk@mylinux:~] 14:24:37 $
那麼如何修復我的 Kitty ssh 客戶端上的不正確輸出呢?
P/S:我在執行zsh時沒有任何像oh-my-zsh這樣的預配置腳本。這是我的.zshrc。
正如 Stéphane Chazelas 所說,問題出在你的
preexec
職能上。當您設置終端標題時,您使用該命令而不保護其特殊字元。命令中的第一個換行符終止轉義序列以設置標題,並列印其他行。您還會遇到命令中的反斜杠和百分比字元的問題,因為
解決方法是去除或編碼控製字元,並執行反斜杠擴展以將控製字元與提示符中的字元分開。例如:
set_title () { print -rn $'\e]0;'${${:-${(%):-$1}$2}//[^[:print:]]/_}$'\a' } precmd () { set_title '[%n@%M:%~]' '' } preexec () { set_title '[%n@%M:%~]' " ($1)" }