Ich verwende Putty (unter Windows 7) zur Verbindung mit der Shell und Vim als Editor. Ich habe in Vim auch die Option mouse=a aktiviert, aber es kommt zu merkwürdigem Verhalten (z. B. zufällige Einfügungen von Zeichen und/oder Zeilenumbrüchen), wenn ich auf die rechte Seite des Vim-Fensters klicke (sagen wir, es sind über 70 % der Bildschirmbreite, wo es merkwürdig wird). Ich gewöhne mich langsam an dieses Verhalten, aber ich würde wirklich gerne wissen, ob ich das irgendwie beheben kann.
Antwort1
PuTTY sendet Mausereignisse mithilfe eines Xterm-Protokolls, das bis auf X10 Mitte der achtziger Jahre zurückreicht. Dieses kodiert die Mauskoordinaten mit jeweils einem Byte für Zeile und Spalte, wobei 32 (der ASCII-Code für ein Leerzeichen) hinzugefügt wird. Dies ermöglicht Koordinaten bis zu 223 (das sind 255 - 32).
Leider entspricht diese Kodierung nicht den geltenden Standards für Terminal-Steuersequenzen, und der Bereich kann effektiv weiter auf 95 (also 127 - 32) eingeschränkt werden, wenn Anwendungen dies nicht speziell berücksichtigen. Insbesondere wenn eine Anwendung vor der Analyse der Steuersequenz eine UTF-8-Dekodierung durchführt, werden Mauskoordinaten über 95 einfach als ungültiges UTF-8 behandelt.
Im letzten Jahr wurden mehrere Versuche unternommen, dieses Problem in xterm zu lösen. Der beste davon ist der sogenannte SGR 1006-Modus, der hinzugefügt wurde inPatch Nr. 277, das eine standardkonforme Steuersequenz mit unbegrenzten Koordinaten verwendet. Die Unterstützung hierfür wird sich langsam auch auf andere Terminalemulatoren und Anwendungen ausweiten.
Antwort2
Dies wurde behoben inVim 7.3.632. Siehe :h sgr-mouse
. Oder fügen Sie einfach dies in Ihr ein ~/.vimrc
:
set ttymouse=sgr
Wenn Sie mit Versionen kompatibel sein möchten, die nicht mouse_sgr
kompiliert sind, verwenden Sie:
if has("mouse_sgr")
set ttymouse=sgr
else
set ttymouse=xterm2
end
Um zu ermitteln, ob Ihre Vim-Version über verfügt mouse_sgr
, führen Sie es vim --version
von der Befehlszeile aus oder geben Sie in Vim ein :version
und suchen Sie nach +mouse_sgr
.