Kittyの複数行コマンドで奇妙な出力が発生しますか?

Kittyの複数行コマンドで奇妙な出力が発生しますか?

VMWare 14.0では、GUIではなくArchLinuxを実行しています。 opensshを介してSSHサーバーをインストールし、次を使用して仮想マシンに接続しました。子猫0.70Windows 10 [バージョン 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:走っています。扱いにくい事前設定されたスクリプトはありません。ああ、。これは私のものです。.zshrc

ベストアンサー1

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)" }

おすすめ記事