Nach dem Generieren einer Tags-Datei mit exuberant-ctags
kann ich von einem Funktionsaufruf zu seiner Deklaration springen, <C-]>
was ziemlich praktisch ist.
Meine Frage ist, wie es anders geht? Wie kann ich zu den Zeilen gehen, in denen die Funktion aufgerufen wird, wenn sich mein Cursor auf der Definition einer Funktion befindet?
Wenn ich mir die von ctags erzeugte Datei ansehe, sehe ich nur Informationen zum Speicherort der Definition und nicht zu den Aufrufen. Bedeutet dies, dass ich das nicht kann, dass Vim eine clevere Lösung ist oder dass ich etwas verwenden muss sonst als exuberant-ctags
?
Antworten:
Mit können Sie nicht zu Funktionsaufrufen springen
ctags
. Für C / C ++ und Java gibt escscope
und es integriert sich gut in Vim (siehe:help cscope
). Für andere Sprachen finden Sie möglicherweise ein Tool, dascscope
kompatible Datenbanken generiert / exportiert (hscope
z. B. für Haskell undstarscope
für Ruby, Go und JavaScript). Sie können auch verwenden ,cscope
mit GNU globalen Datenbanken, mit dem Hinweiscscopeprg
aufgtags-cscope
.Noch eine Randnotiz: Wenn Sie sich nicht durch den gelegentlichen rätselhaften Gebrauch von Engrish abschrecken lassen, möchten Sie wahrscheinlich auch Universal-Ctags anstelle von verwenden
exuberant-ctags
. Letzteres wurde seit Jahren nicht mehr aktualisiert. Ersteres ist eine aktiv gewartete Gabel.quelle
cscope
selbst unterstützt C / C ++, Lex und Yacc. Die Unterstützung für Java ist kaum sinnvoll. Sie können Unterstützung für (altmodisches) PHP und JavaScript von GNUglobal
über dasgtags-cscope
Dienstprogramm erhalten. Und wie ich bereits sagte, gibt es andere Indexer, diecscope
kompatible Datenbanken exportieren können.Mit ctags geht das nicht.
Probieren Sie eine bessere Alternative aus, wie cscope (das sogar einen eigenen Hilfeabschnitt hat :)
:help cscope
oder global .quelle
cscope
selbst unterstützt weder PHP noch JavaScript. Sie können jedoch PHP- und JavaScript-Dateien mit GNU indizieren undglobal
dann ausführengtags-cscope
, um die resultierendegtags
Datei mit zu verwendencscope
.cscope
die Quellen anzusehen, anstatt auf der Grundlage schneller Experimente zu spekulieren.cscope
hat einen eher entspannten C-Parser. Das ist alles was es hat und alles was es tut. Mit diesem Parser werden viele Sprachen "unterstützt", für geeignete Werte von "support". Konstrukte werden erkannt, solange sie mehr oder weniger wie C aussehen. Deshalb werden zB Java-Klassen und neuere PHP-Konstrukte nicht erkannt. Vergleichen Sie fi mit starscope , um neue Sprachen hinzuzufügen.Mit dem grep- Befehl von Vim können Sie alle Dateien in Ihrem Projekt durchsuchen:
Lassen Sie uns das in eine Tastenkombination setzen:
Ich finde diese projektweite Suche mit nur einem Schlüssel von unschätzbarem Wert, wenn ich eine große ungewohnte Codebasis erforsche.
\<
und\>
sind reguläre Ausdrücke, die den Anfang und das Ende eines Wortes anzeigen, so dass Sie keine partiellen Übereinstimmungen erhalten. (Die-w
Option grep könnte eine andere Möglichkeit sein, dies zu erreichen.)Dies ist jedoch eine unintelligente Suche , so dass es zu Fehlalarmen kommen kann, wenn dasselbe Wort in nicht zusammenhängenden Zusammenhängen vorkommt.
Ehrlich gesagt verwende ich stattdessen meine eigene modifizierte Version des grep.vim-Plugins . Dies ist etwas freundlicher zu bedienen:
src/ lib/
statt.
und erinnert sich an die Veränderungen).\b
muss daher anstelle von\<
und verwendet werden\>
.Ich konfiguriere es und schließe einige Standarddateien wie diese aus .
Für den schnellen Zugriff erstelle ich zwei Tastenkombinationen . F3Ermöglicht das Bearbeiten der Befehlszeile. F4Verwendet die zuvor konfigurierte Befehlszeile ohne zusätzliche Tastenanschläge. Der Mechanismus ist ziemlich hässlich und könnte aufgeräumt werden, aber er hat mir gute Dienste geleistet.
quelle