
Ich verwende confirm()
die Funktion von gVim, um ein Dialogfeld zu öffnen, das darauf wartet, dass der Benutzer auf eine Schaltfläche klickt. Es scheint jedoch einen Unterschied im Erscheinungsbild des Dialogfelds zu geben, wenn es von aufgerufen wird .gvimrc
:
Die Verwendung des Befehls: :let MyTestV = confirm("IN MY_GVIMRC")
erzeugt den folgenden Dialog:
Wenn diese Zeile (ohne das ) in eine (und auch die ) Datei :
eingefügt wird , erscheint beim Öffnen eines neuen gVim Folgendes:.gvimrc
.vimrc
Beachten Sie, dass das Dialogfeld angezeigt wird, bevor das eigentliche gVim-Fenster auf dem Bildschirm erscheint.
1) Warum gibt es einen Unterschied im Erscheinungsbild der beiden Dialoge?
2) Wo kann ich den Befehl einfügen, damit der Dialog wie erwartet erscheint?
Antwort1
Ich vermute, dass dies eine Variante der typischen „Race Condition“-Fehlerklasse ist. Starten Sie eine Nicht-GUI-Version von Vim und führen Sie Ihren confirm()
Befehl aus. Dann werden Sie sehen, woher der zusätzliche Text kommt. Im Grunde fügt Vim den Nicht-GUI- confirm()
Text in das GUI-Popup ein, weil die GUI zum Zeitpunkt der .vimrc
Ausführung noch nicht verfügbar ist.
Ich schlage vor, dass Sie eine E-Mail mit einem Bericht darüber bugs
an vim.org
(Adresse leicht verschleiert, um Spambots zu verlangsamen) senden. Sie könnten sogar auf diese SuperUser-Frage verlinken.
Bearbeiten:Dieses Problem ist noch schlimmer, als ich vermutet habe. Ich wollte sehen, ob ich es reproduzieren kann, und habe diesen Befehl in meinen eingegeben .vimrc
:
echo confirm('test')
Und ich habe das gleiche Ergebnis wie Sie erhalten, abermit1
eine zusätzliche Zeile hinzugefügt , die den Rückgabewert der Funktion „confirm()“ enthält . Hier stimmt definitiv etwas nicht.
Bearbeitung Zwei:Wenn die Verzögerung Ihres confirm()
Dialogs kein Problem darstellt, können Sie stattdessen Folgendes tun:
autocmd VimEnter * let MyTestV = confirm("IN MY_GVIMRC")
Antwort2
Ich denke, Sie stoßen auf undefiniertes Verhalten. Funktionen, die mit dem Benutzer interagieren, sollten nicht von ausgeführt werden ~/.vimrc
, da die GUI noch nicht richtig initialisiert wurde. :help input()
enthält eine Warnung:
HINWEIS: Diese Funktion darf nicht in einer Startdatei für die Versionen verwendet werden, die nur im GUI-Modus ausgeführt werden (z. B. die Win32-GUI).
Wenn Sie direkt nach dem Start etwas vom Benutzer abfragen müssen, verwenden Sie :autocmd VimEnter
zum Auslösen.