シェルスクリプトからこのように単純な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^G
tmuxセッションで作業している場合は問題がありません。これによりvimの(バギー?)端末設定処理について考えることになりました。実際、TERM
デフォルト値xterm-256color
を変更するとscreen-256color
問題が解決します。この問題を正しい方法で解決するには、適切な組み合わせを見つける必要があります。端末オプション。
答え1
一部の端末(xtermを含む)は、アプリケーションを送信するように設定できます。制御シーケンス端末がフォーカスを取得または失うとき:端末がフォーカスを^[[I
取得したときと端末がフォーカスを失う^[[O
とき。制御シーケンスを使用してこの機能をオフにする^[[?1004l
(CSI ? Ps l
ctlseqsリストから)、最初からこの機能をオンにしない(デフォルトではオフ)、一部のアプリケーション(Vim?)でこの機能を構成しないように構成します。
^[[2;2R
パレットを報告する端末です(CSI # R
ctlseqsのドキュメントに記載されています)。これは、端末で実行されているアプリケーションが要求した場合にのみ発生します(あなたの場合はVimかもしれません)。^[]11;rgb:3838/3b3b/4040^G
への答えですOSCクエリこれは再びアプリケーションによって開始されます。
DebianのVimは-u NONE
。 (再現することはできませんが、今はxtermにはありません。)私はVimの専門家ではありませんが、実行してみることができるようです。:set ttymouse=
または、:set t_RV=
Vimでオフにします(これは初期化中に実行する必要があるため、スクリプトまたは.vimrc
スクリプト-S
で実行します。対話式で実行するのは遅すぎます)。
表記に注意してください。この回答では、^[
エスケープ文字(\033
in printf
、$'\e'
bash、またはzsh)を使用します。 xterm文書では、CSIは2文字のシーケンスを表します^[[
。