私はシェルに接続するために 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_sgr
、vim --version
コマンドラインから を実行するか、Vim で と入力して:version
を探します+mouse_sgr
。