コマンドラインでvimスクリプトを実行すると、予期しない `^[[I`

コマンドラインでvimスクリプトを実行すると、予期しない `^[[I`

シェルスクリプトからこのように単純なvimスクリプトを取得すると、

$ cat ascript 
:q

$ cat test
vim -S ascript -N -u NONE
read

これが私が実行したときに得られる結果です。

$ bash test
^[[I

出力が^[[I予期せず、私のシェルスクリプトの追加ロジックが中断されました。

誰もがその特性とこの効果を取り除く方法について推測/知っていますか?

アップデート1

zsh test出力は同じで、sh他の理由で機能しません。

$ zsh test
^[[I

$ sh test
test: 2: read: arg count

完全性のために:

"Debian GNU/Linux 11 (bullseye)"
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)

アップデート2

他のシステムで再現を試みた後:

より短い方法は

vim -c ': quit' ; read

これはいくつかのゴミの出力を提供するかもしれないし、提供しないかもしれません^[[I。これは1つの例に過ぎず、もう1つは^[[2;2R^[]11;rgb:3838/3b3b/4040^Gtmuxセッションで作業している場合は問題がありません。これによりvimの(バギー?)端末設定処理について考えることになりました。実際、TERMデフォルト値xterm-256colorを変更するとscreen-256color問題が解決します。この問題を正しい方法で解決するには、適切な組み合わせを見つける必要があります。端末オプション

ベストアンサー1

一部の端末(xtermを含む)は、アプリケーションを送信するように設定できます。制御シーケンス端末がフォーカスを取得または失うとき:端末がフォーカスを^[[I取得したときと端末がフォーカスを失う^[[Oとき。制御シーケンスを使用してこの機能をオフにする^[[?1004lCSI ? Ps lctlseqsリストから)、最初からこの機能をオンにしない(デフォルトではオフ)、一部のアプリケーション(Vim?)でこの機能を構成しないように構成します。

^[[2;2Rパレットを報告する端末です(CSI # Rctlseqsのドキュメントに記載されています)。これは、端末で実行されているアプリケーションが要求した場合にのみ発生します(あなたの場合はVimかもしれません)。^[]11;rgb:3838/3b3b/4040^Gへの答えですOSCクエリこれは再びアプリケーションによって開始されます。

DebianのVimは-u NONE。 (再現することはできませんが、今はxtermにはありません。)私はVimの専門家ではありませんが、実行してみることができるようです。:set ttymouse=または、:set t_RV=Vimでオフにします(これは初期化中に実行する必要があるため、スクリプトまたは.vimrcスクリプト-Sで実行します。対話式で実行するのは遅すぎます)。

表記に注意してください。この回答では、^[エスケープ文字(\033in printf$'\e'bash、またはzsh)を使用します。 xterm文書では、CSIは2文字のシーケンスを表します^[[

おすすめ記事