Springen vom Funktionsdefinitions-Tag zum Prototyp-Tag


7

Soweit ich weiß, hat Vim eine integrierte Unterstützung für Tags ( ctagsin diesem Fall).

Jetzt habe ich eine gemeinsame C-Quelle und C-Header-Datei. Die Header-Datei hat void foo(void);und die Quelldatei hat void foo(void) { /* */ }.

Wenn ich jetzt in der Quelldatei bin, die ich verwenden kann :tags foo, springt sie zur Funktionsdefinition in der Quelldatei. Aber wenn ich es :tnextjetzt benutze , springt es nicht zur Funktionsdeklaration in der Header-Datei.

Ich denke, das sollte irgendwie möglich sein. Ist es?


1
(wie) bist du gelaufen ctags? Siehe auch :h gD.
VanLaser

Ich bin gerade gelaufen ctags -R, das war der Fehler
hgiesel

Antworten:


6

Okay, ich habe es geschafft:

Es hat alles zu tun mit ctags: Zuerst zwei aufgerufene Dateien erstellen foo.cund foo.htesten: Beim foo.hAufschreiben:

int bar(void);

Beim foo.cAufschreiben:

int bar(void) { /* */ }

Führen Sie in dem Verzeichnis, in dem sich diese beiden Dateien befinden, Folgendes aus:

ctags --list-kinds

Sie erhalten eine lange Liste von Sprachen mit diesen Arten von Tags. Suchen Sie C. Beachten Sie die folgende Zeile:

Prototypen mit p-Funktion [aus]

Ich würde es aber trotzdem Funktionsdeklaration nennen . Daher müssen Sie bei der Ausführung Tags für Funktionsprototypen aktivieren ctags. Sie tun dies, indem Sie anrufen:

ctags -R --c-kinds=+p

Beachten Sie, dass dies auch für andere Sprachen gilt, z.

ctags -R --java-kinds=+l

Jetzt können Sie öffnen foo.c( vim foo.c) und eingeben :tag bar. Es zeigt Ihnen die Funktionsdefinition. Geben :tnextSie ein und Sie springen in foo.hdie Deklaration von bar.

Beachten Sie jedoch auch, dass ctagsdie Korrektheit keine Rolle spielt. barZum Beispiel konnte die Deklaration nicht einmal auf die Definition von barangewendet werden, da ich die Header-Datei nicht aufgenommen habe.

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.