Gibt es ein "vim-Laufzeitprotokoll"?

130

Manchmal versuche ich eine Anpassung / einen Befehl in meinem vimrc. Alles scheint richtig zu sein, aber es funktioniert einfach nicht.

Es ist schwierig zu wissen, was passiert, wenn vim gestartet wird, und zu wissen, welcher Befehl fehlgeschlagen ist oder nicht. Daher ist es wirklich schwierig zu debuggen, was ein Problem in meinem vimrc verursachen kann. Es ist ein Versuch-Fehler-Ansatz, der zeitaufwändig und wirklich eine PITA ist. Zum Beispiel habe ich Probleme mit dem Snipmate-Plugin in einigen Dateien und habe keine Ahnung, wie ich das Problem entdecken kann.

Gibt es beim Start von vim ein "Laufzeitprotokoll", das angibt, welche Befehle ausgeführt wurden, welche fehlgeschlagen sind und dergleichen? Das würde mir sehr helfen.

Jemand benutzt Sie immer noch MS-DOS
quelle

Antworten:

161

Wenn Sie vim mit der Option -V [N] ausführen, wird ein ziemlich umfangreiches Laufzeitprotokoll erstellt. Hier ist N die Debug-Ebene.

vim -V9myVim.log

würde ein Protokoll der Debugstufe 9 im aktuellen Verzeichnis mit dem Dateinamen erstellen myVim.log

Sleepynate
quelle
Ich mochte beide Ansätze von Zyx und Ihnen, aber Ihr Ansatz ist meiner Meinung nach besser, weil er einfacher ist, nur im cmd, und ich kann jedes Mal, wenn ich ihn ausführe, einen Pfad zum Protokoll festlegen, und ich muss nicht "aufblasen" "mein vimrc. Und willkommen bei SO!
Jemand benutzt Sie immer noch MS-DOS
2
Siehe auch :h 'verbose'und :h :verbose.
Palec
MacVim scheint keine -VOption oder Befehlszeilenoption zu unterstützen .
emallove
Dadurch wird ein leerer VIM-Puffer ohne Dateinamen geöffnet. Was als nächstes?
Geoff Langenderfer
104

:messages Zeigt alle Warnungen, Fehler und Informationsmeldungen an, die (möglicherweise kurz) in der vim-Statuszeile angezeigt wurden.

:echo errmsg druckt die letzte Fehlermeldung.

g<ist ein weiteres Merkmal, über das nur wenige Menschen Bescheid wissen. Von :help g<:

Mit dem g<Befehl kann die letzte Seite der vorherigen Befehlsausgabe angezeigt werden. Dies ist besonders nützlich, wenn Sie versehentlich <Space>an der Eingabeaufforderung eingegeben haben.

Versuchen Sie beispielsweise :!ls, die Eingabeaufforderung abzubrechen, und drücken Sie dann g<.

Justin M. Keyes
quelle
15

Fügen Sie diese Funktion in .vimrc ein:

function! ToggleVerbose()
    if !&verbose
        set verbosefile=~/.log/vim/verbose.log
        set verbose=15
    else
        set verbose=0
        set verbosefile=
    endif
endfunction

Erstellen Sie dann ein Verzeichnis ~/.log/vimund rufen Sie ToggleVerbose()an, um sich anzumelden ~/.log/vim/verbose.log. Beachten Sie, dass Sie möglicherweise den Fehler "Variable zu tief verschachtelt für die Anzeige" abfangen, der normalerweise nicht angezeigt wird, nur weil Sie Ihre ausführliche Ebene erhöht haben.

ZyX
quelle
2

Ich glaube nicht, dass es per se ein Laufzeitprotokoll gibt , aber Sie können es im Debug-Modus ausführen.
http://web.archive.org/web/20090323034339/http://www.troubleshootingwiki.org/Debugging_Vim_Scripts

Jay
quelle
2
Diese Seite scheint gehackt worden zu sein oder so. Bis es behoben ist, lesen Sie die zwischengespeicherte Version unter web.archive.org/web/20090323034339/http://… .
Mu Mind
Ich habe 403 verboten
Frank Fang
1

Dies widerspricht wahrscheinlich allem, wofür SO steht, aber hier ist, was ich tue: Ich drücke einfach auf den Druckbildschirm, sobald die Warnung erscheint, und schaue mir das Bild an.

puk
quelle
Hätte die Pause-Taste nicht einen ähnlichen Effekt, abzüglich des verschwendeten Papiers?
Turm
Bisher wusste ich nie, was die Pause-Taste tat. Auf jeden Fall glaube ich nicht, dass es irgendetwas unter Linux stackoverflow.com/questions/92802/…
puk
2
FWIW, * nix-Terminals unterbrechen die Ausgabe bei Strg-S und werden bei Strg-Q fortgesetzt.
Joeytwiddle
1

Ich musste "set nocp" hinzufügen, um die Funktion "ToggleVerbose ()" zu verwenden, wenn ich wegen & verbose im Root ausgeführt wurde

masuch
quelle