Wie navigieren Sie mit VIM durch große Quelldateien?

7

Erstens frage ich nicht nach Leistung. Ich suche nach etwas, das mir mental hilft, in große C-Quellcodedateien zu gelangen, an die ich ja nicht gewöhnt bin. Nehmen wir zum Beispiel readelf.c. Diese Datei besteht aus 20.000 Zeilen. Ich kann den Code lesen und verstehen, aber ich möchte lieber nicht. Dies ist nach meiner Erfahrung mit C immer nur ein Problem. Aus irgendeinem Grund ist die Dateigröße in C absurd groß und readelf.cdamit nicht allein. Gibt es irgendetwas, das eine C-Datei in etwas Vernünftiges wie ein strukturiertes Projekt virtualisieren kann? Ich weiß, das verlangt viel, aber es scheint, als hätte jemand mit all dem existierenden C-Code so etwas getan.

Das Terminal meines Laptops kann ~ 50 Leitungen aufnehmen. Welche Tools und Plugins bietet vim zum Navigieren in Dateien mit mehr als 10.000, aber weniger als 100.000 Zeilen?

Evan Carroll
quelle
5
Code-Faltung kann etwas helfen, zusammen mit Tags
D. Ben Knoble
1
Sie können Tagbar versuchen . Siehe den Screenshot auf der Seite. Sie können dann durch die Funktionen und Strukturen navigieren, die in einer Seitenleiste definiert sind.
Liu Sha
@LiuSha das ist genau das, wonach ich suche, wenn du das zu einer Antwort machen willst, werde ich es akzeptieren.
Evan Carroll

Antworten:

4

Ich denke, was Sie suchen, ist ein Plugin wie eine Tag-Leiste , mit der eine Seitenleiste erstellt werden kann, in der alle Funktionen, Strukturen / Klassen, Makros usw. angezeigt werden. Außerdem können Sie auf das Tag klicken (oder die Eingabetaste drücken) und dann zu springen die Definition.

Liu Sha
quelle
3

Sie können das Falten von Code mit der Option vim aktivieren: set foldmethod=syntax Dies reduziert die Menge an Code, die Sie gleichzeitig sehen, und macht ihn verwaltbar. Verwenden Sie nach dem Aktivieren der Code-Faltung die folgenden Befehle zum Öffnen und Schließen von Faltungen: Die Befehle zc (Schließen), zo (Öffnen) und za (Umschalten) werden auf einer Ebene der Faltung am Cursor ausgeführt. Die Befehle zC, zO und zA sind ähnlich, funktionieren jedoch auf allen Faltebenen (z. B. kann sich die Cursorzeile in einer offenen Falte befinden, die sich innerhalb einer anderen offenen Falte befindet; durch Eingabe von zC werden alle Falten am Cursor geschlossen).

Der Befehl zr reduziert das Falten, indem eine weitere Ebene von Falten im gesamten Puffer geöffnet wird (die Cursorposition ist nicht relevant). Verwenden Sie zR, um alle Falten zu öffnen.

Pavan
quelle
1

Etwas, das ich tue, ist zu benutzen

  • Plugin Gutentags: Wird zum Erstellen von Tags im gesamten Projekt aus dem Stammordner verwendet.
  • Plugin Tagbar: Wird zum Navigieren in den Dateien verwendet.
  • Plugin Ack: Wird verwendet, um innerhalb des gesamten Projekts zu suchen.

Sie finden mein gesamtes Setup @ hier

MaNyYaCk
quelle
1

Zusätzlich zu ctags- basierten Plugins wie Taglist verwende ich cscope . Einige Plugins können nützlich sein: wie cscope_macros und CCTree . Bevor Sie ctags oder cscope verwenden können, müssen Sie eine Tag-Datei und eine cscope-Datenbank erstellen (siehe Links oben). Obwohl diese Tools ziemlich alt sind, funktionieren sie mit vielen modernen C-Implementierungen einwandfrei.

Vergessen Sie auch nicht über Markierungen Sie auf wichtige Orte festlegen können, Falten unerwünschte Teile, gD, *, ]]und ähnliche Bewegungen. Wenn Sie keine externen Programme oder Plugins verwenden möchten, können Sie auf diese Weise eine Vorschau der Datei erhalten

:set foldmethod=syntax
zM

foldmethodLegt die Faltung basierend auf der C-Syntax fest (Sie können sie in .vimrc schreiben) und der zMBefehl (im normalen Modus) faltet alles auf die maximale Ebene.

Weitere Informationen finden Sie unter:

:help tags
:help ctags
:help cscope
:help mark-motions
:help folding
Dmitry
quelle
1

Mit der Tagbar können Sie durch eine große Anzahl von Funktionen in einer einzigen Datei navigieren. Unter anderem unterstützt es das Sortieren nach Name oder Zeilennummer, was ich sehr hilfreich finde.

markskann auch eine große Hilfe beim Hin- und Herbewegen in einer großen Datei sein. Weitere Informationen finden Sie unter :h marksoder http://vimdoc.sourceforge.net/htmldoc/motion.html#mark .

Wenn Sie feststellen, dass ständig zwischen mehreren (großen) Dateien gewechselt werden muss, hilft Ihnen Gtags möglicherweise dabei, Definitionen / Referenzen im gesamten Projekt zu finden.

Salchint
quelle