Navigieren in Codeprojekten ohne Verwendung externer Befehle

9

Ich versuche, eine Toolbox mit Vim-Befehlen / Abfragen im Befehls- oder Suchmodus zu sammeln, um in einer Codebasis zu navigieren, ohne Ctags oder andere externe Tools zu verwenden. Ctags sind großartig, aber der Support kann je nach Entwicklungsumgebung, in der Sie sich befinden, variieren. Ich möchte mich nur auf das Wissen von Vim verlassen.

user1332148
quelle
4
Vielleicht sollten Sie "externe Tools" anstelle von "ctags" sagen, da mein erster Vorschlag cscope wäre.
Muru
1
Eine Sache, die ich benutze, ist Befehl gd. Dies führt den Cursor zur lokalen Deklaration der Variablen unter dem Cursor.
Nitishch
@muru Ich möchte keine externen Tools verwenden. Was ich zu lernen versuche, sind Techniken zum effizienten Navigieren in einer Codebasis nur mit Vim-Befehlen. Ich weiß, dass dies möglich ist, erfordert aber offensichtlich tiefere Vim-Kenntnisse als ich. Möglicherweise keine gute SE-Frage, da sie so offen ist, aber ich weiß nicht, wo ich sonst suchen soll.
user1332148

Antworten:

11

"Suche einschließen" ist ein solches Werkzeug:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Im Zusammenhang mit "Suche einschließen" ist auch "Definitionssuche" interessant:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Beide Tools hängen von einer Vielzahl von Optionen ab, die von Ihren Dateityp-Plugins festgelegt werden können oder nicht.

Siehe :help include-search.


Sie können auch gdund gDals Lightweight-Versionen von [Dund verwenden ]D.

Siehe :help gd.


Im aktuellen Puffer listet der folgende Befehl jede Funktionsdefinition und ihre Zeilennummer auf:

:g/func/#

Siehe :help :g.


:grepund :vimgrepsind auch nützlich, wenn auch nur, weil ihr Ergebnis in die Quickfix-Liste eingespeist wird, mit der navigiert werden kann :cn, :cp… und im sehr praktischen Quickfix-Fenster angezeigt wird.

Siehe :help :grep, :help :vimgrepund :help quickfix.


Das Sprechen der quickfix Liste / Fenster, schrieb ich diese Funktion (basierend auf der Arbeit anderer) die Ergebnisse angezeigt werden [I, ]I, :ilist, [D, ]Dund :dlistin der quickfix Liste / Fenster. YMMV natürlich.


Obwohl es sich nicht ausschließlich um ein Navigationswerkzeug handelt, finde ich das Vorschaufenster sehr nützlich, um einen Blick auf die Signatur der Funktion zu werfen, mit der ich arbeite.

Siehe :help preview-window.


Das gesagt…

Vim weiß nichts über Ihren Code außer ein paar Regex-Mustern, die möglicherweise zu Ihrem Codierungsstil passen oder nicht. Dies bedeutet, dass die Code-Navigation besser mit Hilfe externer Tools wie ctags, cscope oder GNU GLOBAL durchgeführt werden kann.

romainl
quelle
5

Es gibt viele Möglichkeiten, durch Code zu navigieren (in Vim und extern enthalten). Ich entdecke sie immer noch. Was ich in der täglichen Arbeit benutze, ist:

  • Greping-Text in den Projektdateien und Navigation über das Quickfix-Fenster (ich benutze Silver Searcher zum Greping).
  • Ich weiß, dass es sprachbezogene Plugins für Javascript, Ruby, Go gibt, die es ermöglichen, zwischen Modulen des Programms zu springen (im Javascript-Plugin ist gf-command
  • Ctrl+O, Ctrl+I- im "Verlauf" der Navigation vor- oder zurückspringen
  • g; - Springe zur zuletzt bearbeiteten Stelle in der Datei
  • Verwenden von Markierungen zum Platzieren von "Lesezeichen" an bestimmten Stellen. Sie können mit dem '[some_letter]Befehl eine Markierung setzen . Wenn der Buchstabe ein Großbuchstabe ist, erhalten Sie eine Markierung, die von jeder Datei (Puffer) aus erreichbar ist.
Alexander Myschow
quelle