Command-Line

Kitty 中多行命令的奇怪輸出?

  • October 18, 2017

我在 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職能上。當您設置終端標題時,您使用該命令而不保護其特殊字元。命令中的第一個換行符終止轉義序列以設置標題,並列印其他行。

您還會遇到命令中的反斜杠和百分比字元的問題,因為print執行反斜杠擴展並且您還在命令上執行提示百分比擴展。

解決方法是去除或編碼控製字元,並執行反斜杠擴展以將控製字元與提示符中的字元分開。例如:

set_title () { print -rn $'\e]0;'${${:-${(%):-$1}$2}//[^[:print:]]/_}$'\a' }
precmd () { set_title '[%n@%M:%~]' '' }
preexec () { set_title '[%n@%M:%~]' " ($1)" }

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