奇妙なvim / xtermの相互作用:ファイルを開いたときの `" `レジスタの自動挿入


7

これは私を怒らせています。XTerm(330)と最新のvim 8.0.1365(FreeBSD上)を使用しています。

時々、常にではないが、5分の1にvimでファイルを開くと、面白い行が行1の上に挿入されます。多くの頭を掻いた後、前のセッションで最後に削除した行であることに気付きました。つまり、""P"レジスターを貼り付ける)が実行されているように見えます。

さらに調査した結果、これ*sunKeyboard: trueはXTermリソースで設定した場合、およびなどのレンダリングされたフォントを使用した場合にのみ発生することがわかりました-fa "DejaVu Sans Mono:size=24"。(私はあなたがそれが奇妙だったと言いましたね?)プラグインがいたずらをするのを避けるために、ディレクトリは.vimrcありませ.vimん。

次のコマンドを使用して、効果をいくらか再現できます。

#!/bin/sh
rm -f .viminfo; echo inserted >bar; echo x >baz
vim -c d -c wq bar
echo '*sunKeyboard: true' > XTerm
export XAPPLRESDIR=$PWD
for i in 1 2 3 4 5 6; do
   xterm -fa "DejaVu Sans Mono:size=24" -e vim baz
done

これにより、必要なファイルが作成さinsertedれ、"レジスターに配置され、vimが数回呼び出されます。1行目に1行のファイルがある場合xは、すべて問題ありません。q次の呼び出しのために入力してください。もしあなたが見るなら

inserte2
x

問題を再現しました。1行目の最後の文字がに​​置き換えられていることにも注意してください2。これは.レジスターから来ているようです。レジスターは次のとおりです。

:reg
--- Registers ---
""   inserted^J
"1   inserted^J
".   2
"%   baz
  • スクリプトを数回試して、問題を再現できますか?移動.vimrcして.vim一時的に邪魔にならないようにしてください。
  • もしそうなら、ここで何が起こっているのか教えてもらえますか?
  • これの底に到達する方法の提案はありますか?

更新

私だけではないようです:https : //github.com/vim/vim/issues/2238


どちらかいset t_RS=たりset t_SH=、あなたのvimrcの仕事に?
2017

@Massはい、どちらも機能します。つまり、マジックラインの挿入はありません。これらのエントリを使用すると、:regコマンドは".内容を表示しなくなります。
イェンス

github.com/vim/vim/pull/2126で問題が解決するかどうかを確認しましたか?正確には何の出力:echo v:termresponseですか?
クリスチャンブラバンド2018

@ChristianBrabandt出力は^[[>19;331;0cです。githubページは、情報を収集する方法がわからない、曲がりくねった小さな迷路です。下部に「クローズ」と表示されていますが、「8.0。####で修正済み」などのパッチ番号が見つかりません。コメントしてくれてありがとう!
イェンス

回答:


4

vimが起動すると、ターミナルコードを応答するターミナルエミュレーターに問い合わせます。vimは通常、これをでキャプチャしv:termresponseます。ただし、コードが通過して、vimコマンドのように見え、意図しない動作を引き起こす場合があります。

vimが送信するものを制御する2つのオプションが、多くの人に問題を引き起こすようです。

t_RS    request terminal cursor style           *t_RS* *'t_RS'*
t_SH    set cursor shape                        *t_SH* *'t_SH'*

これらは、vimがカーソルの形状を設定し、デフォルトの端末カーソルを決定できるようにするために最近追加されました。これらのいずれかを空(set t_SH=またはset t_RS=)に設定すると、vimはチェックをスキップします。問題を引き起こしているのは、端末からの応答です。

xtermではデフォルトで機能するはずなので、これはおそらくvimのバグです。これらのオプションを空に設定するだけでなく、

  • 最新のvimバージョンに更新する
  • バグ(参照報告:h bugs慎重に、ご使用のプラットフォームと端末エミュレータに注意)、、見て正確な行動、との値をv:termresponse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.