Seltsame vim / xterm-Interaktion: Automatisches Einfügen des Registers "" beim Öffnen der Datei


7

Dieser macht mich verrückt. Ich verwende XTerm (330) und die neueste Version 8.0.1365 (unter FreeBSD).

Manchmal, nicht immer, ungefähr 1 zu 5, wenn ich eine Datei mit vim öffne, wird eine lustige Zeile über Zeile 1 eingefügt. Nach vielen Kopfkratzern wurde mir klar, dass dies die letzte Zeile ist, die ich in einer vorherigen Sitzung gelöscht habe. Mit anderen Worten, es sieht so aus, als würde ""P(das "Register einfügen ) ausgeführt.

Nach einigen weiteren Untersuchungen stellte ich fest, dass dies nur passiert, wenn ich *sunKeyboard: truedie XTerm-Ressourcen festgelegt habe und wenn ich eine gerenderte Schriftart verwende, z -fa "DejaVu Sans Mono:size=24". (Ich habe dir doch gesagt, dass es seltsam ist, oder?) Ich habe kein .vimrcund kein .vimVerzeichnis, um zu vermeiden, dass mir ein Plugin einen Streich spielt.

Ich kann den Effekt mit den folgenden Befehlen etwas reproduzieren:

#!/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

Dadurch werden die erforderlichen Dateien erstellt, insertedin das "Register gestellt und vim einige Male aufgerufen. Wenn Sie xin der ersten Zeile eine einzeilige Datei mit sehen , ist alles in Ordnung. Geben Sie qfür den nächsten Aufruf ein. Wenn du aber siehst

inserte2
x

Sie haben das Problem reproduziert. Beachten Sie auch, dass das letzte Zeichen in Zeile 1 durch ersetzt wurde 2. Dies scheint aus dem .Register zu kommen . Hier sind die Register:

:reg
--- Registers ---
""   inserted^J
"1   inserted^J
".   2
"%   baz
  • Können Sie das Problem reproduzieren, wenn Sie das Skript mehrmals versuchen? Achten Sie darauf, sich zu bewegen .vimrcund .vimvorübergehend aus dem Weg zu gehen.
  • Wenn ja, können Sie mir sagen, was hier los ist?
  • Irgendwelche Vorschläge, wie man dem auf den Grund geht?

AKTUALISIEREN

Ich bin anscheinend nicht der einzige: https://github.com/vim/vim/issues/2238


Funktioniert entweder set t_RS=oder set t_SH=in Ihrem vimrc?
Messe

@Mass Ja, einer von beiden funktioniert, dh keine magische Linieneinfügung mehr. Mit diesen Einträgen zeigt der :regBefehl den ".Inhalt nicht mehr an .
Jens

Haben Sie überprüft, ob github.com/vim/vim/pull/2126 Ihr Problem behebt? Was genau ist die Ausgabe von :echo v:termresponse?
Christian Brabandt

@ChristianBrabandt Die Ausgabe ist ^[[>19;331;0c. Die Github-Seite ist ein kurviges kleines Labyrinth, aus dem ich keine Informationen habe. Im unteren Bereich steht "geschlossen", aber ich kann anscheinend keine Patch-Nummer finden, z. B. "in 8.0 behoben. ####". Vielen Dank, dass Sie sich die Zeit für einen Kommentar genommen haben!
Jens

Antworten:


4

Beim Start von vim wird Ihr Terminalemulator abgefragt, der mit Terminalcodes antwortet. vim erfasst dies normalerweise in v:termresponse. Manchmal kommen die Codes jedoch durch und sehen häufig wie vim-Befehle aus und verursachen unbeabsichtigtes Verhalten.

Zwei der Optionen, die steuern, was vim sendet, scheinen vielen Menschen Probleme zu bereiten:

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

Diese wurden kürzlich hinzugefügt, damit vim die Cursorform festlegen und den Standard-Terminalcursor bestimmen kann. Wenn Sie eine dieser Optionen auf leer ( set t_SH=oder set t_RS=) setzen, überspringt vim die Prüfung. Es ist die Antwort von Ihrem Terminal, die das Problem verursacht.

Dies ist höchstwahrscheinlich ein Vim-Fehler, da er in xterm standardmäßig funktionieren sollte. Abgesehen davon, dass diese Optionen leer sind, schlage ich vor,

  • Aktualisierung auf die neueste vim-Version
  • Melden Sie den Fehler (siehe :h bugs) und notieren Sie dabei sorgfältig Ihre Plattform und Ihren Terminalemulator, das genaue Verhalten und den Wert von v:termresponse.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.