Bisher kann ich zwei Lösungen für das Problem nennen, entweder die Deklaration oder die Definition einer Funktion zu finden. Ich weiß, dass es eine andere, auf Tags basierende Lösung gibt, aber da ich sie nicht verwende, lasse ich sie von anderen geben.
Das Modischere zuerst: YouCompleteMe verfügt über ein :GoToDefinition
und :GoToDeclaration
zwei Befehle.
Die, die ich benutze (es ist schwer, 10 Jahre lange Gewohnheiten zu ändern). Mein lh-tags- Plugin bietet die Möglichkeit, eine ctags-Datenbank zu generieren und diese schrittweise zu aktualisieren. Außerdem bietet es eine Möglichkeit ( CTRL+W Meta+Down
), alle Deklarationen und Definitionen darzustellen , die mit dem übereinstimmen, was sich unter dem Cursor befindet (/ was ausgewählt ist). Da diese Lösung auf ctags basiert, kann sie nicht wissen, mit welcher Überlastung der Bezeichner unter dem Cursor tatsächlich zusammenhängt. Andere ctags-basierte Lösungen sollten zu diesem Thema genauso schlecht (/ so gut) sein. Allerdings sollte YCM hier viel besser sein.
Discl .: Ich habe lh-tags als ergonomischere Alternative zu implementiert :tselect
.
(Eigentlich erinnere ich mich an eine dritte Lösung: Ich hatte eine Reihe von Clang-Indexer und das dazugehörige Vim-Plugin gestartet , das es gekapselt hätte. Aber mit YCM würde ich diese Lösung vergessen.)
BEARBEITEN: Ab 2019 basiert die effizienteste Lösung auf LSP-Servern . Ich benutze COC + ccls, um zu indizieren, zu springen und viele weitere Dinge zu tun. Ich greife auf tagbasierte Lösungen zurück, wenn ich zu faul bin, COC für ein Projekt zu konfigurieren, für das ich nicht viel Zeit aufbringe oder in dem ich die neuesten Versionen von clang und ccls nicht installieren kann.