Seltsame Einfügung von Vim per Mausklick

Seltsame Einfügung von Vim per Mausklick

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_sgrkompiliert 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 --versionvon der Befehlszeile aus oder geben Sie in Vim ein :versionund suchen Sie nach +mouse_sgr.

verwandte Informationen