Wie debugge ich meine vimrc-Datei?


80

Ich habe ein Problem in Vim, und ich denke, es könnte in meiner vimrcDatei sein (oder mir wurde gesagt, es könnte meine vimrcDatei sein).

Wie überprüfe ich das? Woher weiß ich, wo genau das Problem liegt, wenn es sich um meine vimrcDatei handelt ?

Antworten:


79

Das erste, was Sie tun möchten, ist, Vim mit den Standardeinstellungen zu starten:

vim -u NONE -U NONE -N

Das -u NONEverhindert, -U NONEdass Vim Ihren vimrc lädt, verhindert , dass Vim Ihren gvimrc lädt, und -Nweist Vim an, den nicht kompatiblen Modus zu verwenden (dies ist nicht erforderlich, aber die meisten Vim-Benutzer sind nicht an den "kompatiblen" Modus gewöhnt ). Beachten Sie, dass die NONEist erforderlich in allen Caps zu sein.

In Windows können Sie diese Flags hinzufügen, indem Sie eine neue Verknüpfung 1 erstellen .

  • Wenn das Problem weiterhin besteht, wissen Sie, dass es nicht in Ihrem vimrc enthalten ist.

  • Wenn das Problem verschwindet, liegt es an etwas in Ihrer vimrc-Datei.

Es ist nicht mein vimrc!

Hurra! Geh und stell deine Frage. Stellen Sie sicher, dass Sie versucht haben, Vim ohne eine vimrc-Datei zu starten!

Also ist es mein vimrc, was nun?

Wenn Sie dies noch nicht getan haben, möchten Sie wahrscheinlich zuerst eine Sicherungskopie Ihrer vimrc-Datei speichern.

Überprüfen Sie die Plugins

Das nächste, was Sie wahrscheinlich tun möchten, ist, zuerst alle Plugins zu deaktivieren. Plugins können in Vim einiges verändern. Wenn dies das Problem behebt, versuchen Sie herauszufinden, welches Plug-In verwendet wird, indem Sie es nacheinander erneut aktivieren. Nachdem Sie herausgefunden haben, welches Plugin genau das Problem verursacht, können Sie es versuchen und beheben, indem Sie die Dokumentation dieses Plugins lesen und / oder eine Frage mit dem Tag stellen plugin-<name>.

Wenn es sich nicht um ein Plugin handelt und Sie keine Ahnung haben, was Ihr Problem verursacht, handelt es sich um ein Testverfahren. Kommentieren Sie eine oder mehrere Zeilen in Ihrem vimrc aus, starten Sie Vim, prüfen Sie, ob das Problem auftritt, und wiederholen Sie diesen Vorgang, bis das Problem nicht mehr auftritt. Der schnellste Weg dies zu tun ist:

  1. Kommentieren Sie ungefähr die Hälfte Ihrer vimrc-Datei aus (oder entfernen Sie sie).
  2. Starten Sie Vim neu oder öffnen Sie ein neues Vim (ein erneutes Laden des vimrc ist nicht gut genug, da die Einstellungen nicht deaktiviert sind).
  3. Ist das Problem jetzt weg? Setzen Sie das Teil, das Sie entfernt haben, wieder ein (es ist nützlich, Vim offen zu halten und Rückgängig zu machen) und wiederholen Sie Schritt 1 für das Teil, das Sie wieder hinzugefügt haben.
  4. Tritt das Problem weiterhin auf? Fahren Sie mit Schritt 1 fort.

Am Ende sollten Sie eine einzelne Option oder eine Kombination einiger Optionen haben, die Ihr Problem verursachen. Sie können mehr über jede Option in Vim herausfinden, indem Sie Folgendes verwenden:

:help 'option_name'

Die Anführungszeichen sind hier wichtig, es funktioniert normalerweise ohne sie, aber manchmal landen Sie auf der falschen Seite, wenn Sie sie weglassen.

Wenn Sie nach dem Lesen der Hilfeseite immer noch verwirrt sind, wissen Sie, wo Sie eine Frage stellen können ;-)

Debuggen eines einzelnen Plugins

Wenn Sie ein einzelnes Plugin isolieren möchten, vielleicht um eine Frage zu stellen, möchten Sie so wenig wie möglich laden, aber dennoch das Plugin laden. Sie können dies ganz einfach mit der Paketfunktion von Vim tun. Dies erfordert Vim 8 oder eine einigermaßen aktuelle Version von Neovim.

  1. Erstellen Sie ein neues leeres Verzeichnis. ~/pluginIn diesem Beispiel verwenden wir den Pfad. Stellen Sie nun das Plugin in das reguläre pack/plugins/start/$nameVerzeichnis. Zum Beispiel:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Erstellen Sie eine test-vimrcDatei mit folgendem Inhalt. Dadurch wird sichergestellt , dass Vim - Plugins aus dem Laden wird ~/pluginVerzeichnis und nicht das ~/.vim Verzeichnis:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. Starten Sie Vim mit:

    vim -U NONE -u ~/test-vimrc
    

    Sie haben jetzt eine minimale vimrc mit nur diesem Plugin.


Fußnoten

1 Zum Beispiel: auf 64 - Bit - Windows ist die Abkürzung würde wie folgt aussehen: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N. Klicken Sie zum Erstellen mit der rechten Maustaste in den Datei-Explorer, in dem Sie die Verknüpfung erstellen möchten, wählen Sie Neu -> Verknüpfung und fügen Sie den Verknüpfungstext ein. Möglicherweise müssen Sie den Vim-Pfad ändern, wenn Ihr Vim an einem anderen Ort installiert ist.



2
Nachdem Sie Ihren Fehler herausgefunden haben, ist dies ein guter Zeitpunkt, um Ihre .vimrc-Datei unter Versionskontrolle zu halten :) Es wird fast immer eine der letzten Änderungen sein, die Sie daran vorgenommen haben und die dazu geführt haben, dass sich Dinge merkwürdig verhalten.
Escrafford

1
Sie brauchen nicht, -U NONEwenn Sie haben -u NONE.
Antony

@MartinTournoij Ich schlug eine Bearbeitung vor , um es dem Erstleser zu erleichtern, sie zu verstehen. Ich hoffe du magst es. Vielen Dank!
Jpaugh

1
Danke @jpaugh; Ich denke, diese Reihenfolge macht mehr Sinn.
Martin Tournoij

31

-DSpeziell für das Debuggen gibt es einen Vim-Parameter, der nach Ausführung des ersten Befehls aus einem Skript in den Debugging-Modus wechselt.

Um beispielsweise Vim im Debug-Modus ohne Plugins auszuführen, führen Sie Folgendes aus:

vim --noplugin -D

Geben Sie n/ ein next, um die nächste Zeile zu analysieren, und halten Sie gedrückt Enter.

Und contoder qum zur vimBenutzeroberfläche zurückzukehren.

Wenn Sie eine GUI-Version verwenden, geben Sie einen guiBefehl in Ihren vimrc ein, um das Debuggen direkt nach diesem Befehl zu starten.

Drücken Sie Ctrl+, dum eine Liste der verfügbaren Befehle anzuzeigen

Weiterlesen:


1
Dies war am hilfreichsten, um einen einfachen Fehler in der .vimrc-Datei zu finden, der eine Fehlermeldung verursachte. Es lohnt sich, dies zuerst zu versuchen, da dies schnell erledigt werden kann.
RichVel

1
@kenorb Dieser Befehl ist verdammt fantastisch, rette mich davor, zu einem anderen Editor zu wechseln.
TheLazyChap

11

Versuchen Sie vim -u NONE -U NONE -N, wie bereits erwähnt, zunächst sicherzustellen, dass Ihr Vanille-Vim ordnungsgemäß funktioniert.

Dann starte vim normal und überprüfe

:messages

von innen vim nach dem problem, das alle warnungen und fehler anzeigt.

Zum Schluss starten Sie vim mit dem folgenden Befehl

vim -V9logfile.log

Das Protokoll erstellt eine aufgerufene Datei logfile.log, -V9gibt die Protokollierungsstufe an und versucht, Ihr Problem zu reproduzieren.


11

Noch ein Tipp: So höhlenbewusst es auch scheinen mag, ich füge hinzu: "message" in meine .vimrc ein, um zu sehen, was ausgeführt wird und was nicht.

Zum Beispiel

if executable('ag')
  :echom "AG FOUND"

  ...
endif

Auf diese Weise kann ich schnell feststellen, ob der if-Block ausgeführt wird usw. Die Meldung wird beim nächsten Start von vim auf der Konsole gedruckt.


6
Wenn Sie einen echomanderen interessanten Befehl verwenden :messages, erhalten Sie das vollständige Protokoll der zurückgegebenen Nachrichten. Es kann manchmal nützlich sein, sie sich nach dem Start anzusehen.
statox

Dies ist fast das, was ich brauchte. Ich möchte sehen, wie hoch der Wert von cpoptions in meinem vimrc ist. Wie kann ich die Ausgabe von ": set cpoptions" wiedergeben? ?
Mike Lippert

10

Ich habe festgestellt, dass es hilfreich ist, eine Sammlung von Variablen zu führen, mit denen Sie Teile Ihrer Variablen umschalten .vimrckönnen, um Teile davon zu deaktivieren oder zu aktivieren, ohne dass Sie Kommentare abgeben müssen. Es hat auch den angenehmen Nebeneffekt, dass Sie gezwungen werden, über die Organisation Ihres Unternehmens nachzudenken .vimrc.

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

Hier ist ein Beispiel eines Abschnitts, der von einem bewacht wird if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

Meine vimrc Ladezeit war sehr langsam, ungefähr 400 ms, und ich habe sie nur durch Entfernen dieser Zeile auf 20 ms reduziert:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

Stellen Sie sicher, dass Sie keine derartigen externen Befehle aufrufen.


1
Willkommen auf der Seite! Dies ist ein nützlicher Leckerbissen, aber ein bisschen spezifischer als die sehr allgemeine Frage, die gestellt wird. Es könnte besser als Antwort auf z. B. diese Frage hinzugefügt werden , oder wenn Sie nur Wissen teilen möchten, könnten Sie vielleicht Ihre eigene Frage stellen und beantworten?
Rich

0

Hier ist eine sehr einfache Prozedur, um Ihnen den Einstieg zu erleichtern.

  1. Kommentieren Sie den Inhalt Ihrer gesamten .vimrc-Datei aus
  2. Laden Sie Ihre .vimrc-Datei neu, indem Sie :source %oder ausführen:so $MYVIMRC
  3. Kommentiere einen diskreten Teil der Datei aus (normalerweise von oben beginnend)
  4. Wiederholen Sie die Schritte 2 und 3, bis Sie den Fehler finden.
  5. Beheben Sie den Fehler.

1
Diese Antwort könnte viel besser sein, wenn Sie sie richtig großschreiben und interpunktieren.

Es wird dringend empfohlen, dies mit einer binären Suche zu tun.
D. Ben Knoble
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.