マウスクリックで Vim から奇妙な挿入が発生する

マウスクリックで Vim から奇妙な挿入が発生する

私はシェルに接続するために putty (Windows 7) を使用し、エディタとして Vim を使用しています。また、Vim で mouse=a オプションを有効にしていますが、Vim ウィンドウの右側 (画面幅の 70% 以上の領域で異常が発生するとします) をクリックすると、奇妙な動作 (文字や改行がランダムに挿入されるなど) が発生します。このような動作には徐々に慣れてきていますが、これをどうにかして修正できるかどうか知りたいです。

答え1

PuTTY は、80 年代半ばの X10 にまで遡る xterm プロトコルを使用してマウス イベントを送信します。これは、マウスの座標を行と列にそれぞれ 1 バイトずつエンコードし、32 (スペース文字の ASCII コード) を追加します。これにより、最大 223 (255 - 32) の座標が可能になります。

残念ながら、このエンコードは端末制御シーケンスの適用可能な標準に準拠しておらず、アプリケーションが特別な考慮をしない限り、範囲は実質的に 95 (つまり 127 - 32) に制限される可能性があります。特に、アプリケーションが制御シーケンスの解析前に UTF-8 デコードを実行する場合、95 を超えるマウス座標は無効な UTF-8 として扱われることになります。

過去1年間、xtermでこの問題に対処するためにいくつかの試みがなされてきました。その中で最も優れたものは、2000年に追加されたいわゆるSGR 1006モードです。パッチ #277は、無制限の座標を持つ標準準拠の制御シーケンスを使用します。このサポートは、他の端末エミュレーターやアプリケーションにも徐々に浸透していきます。

答え2

これは修正されましたヴィム7.3.632. 参照してください:h sgr-mouse。または、これを~/.vimrc:に入力してください。

set ttymouse=sgr

コンパイルされていないバージョンとの互換性を確保したい場合はmouse_sgr、以下を使用します。

if has("mouse_sgr")
    set ttymouse=sgr
else
    set ttymouse=xterm2
end

お使いのバージョンの Vim に があるかどうかを確認するにはmouse_sgrvim --versionコマンドラインから を実行するか、Vim で と入力して:versionを探します+mouse_sgr

関連情報