Sind in vim typisierte abgeleitete ctags möglich?

9

Gegeben folgender Code:

%Vor%

Da ich vim verwende und meine Ctags generiert habe, wenn ich meinen Cursor auf foo() in main() setze und auf ctrl+] hänge, erhalte ich eine Liste der Implementierungen von foo , wie dort sind mehr als eins. Wenn es nur eins gäbe, würde es sofort zu dieser Implementierung springen.

Gibt es eine Möglichkeit in vim, dass der Typ von a so interpretiert wird, dass wenn ich ctrl+] drücke, springt er sofort zur Implementierung von A::foo() , anstatt mir eine Auswahlliste zu liefern? Es scheint, als ob ein solches Plugin existieren sollte und ich kann es nicht finden.

Update: Es scheint, dass es derzeit keine Lösung für dieses Problem gibt, daher habe ich die Antwort von exclipy unten gewählt. Sollte sich eine Lösung ergeben und eine neue Antwort verfügbar sein, werde ich die Antwort auf diese Frage aktualisieren.

    
Cory Klein 12.09.2011, 19:24
quelle

1 Antwort

4

Was Sie tun möchten, ist nicht möglich, es sei denn, Vim kann die gesamte C ++ - Übersetzungseinheit analysieren, wie es ein C ++ - Compiler tun würde. Dies geht weit über den Umfang von Ctags hinaus, die sehr einfache Heuristiken verwenden, um nur die Umgebung des Cursors zu tokenisieren.

Also ist die naheliegende Lösung ... einen C ++ Parser in Vim zu stecken! Es gibt tatsächlich ein Plugin namens clang_complete, das bereits den größten Teil des Heavy Liftings in den Clang C ++ Parser einbringt. Von dieser Basis aus sollte es einfach sein, sie so zu erweitern, dass sie die Clang-API zur Implementierung von Jump-to-Definition verwendet.

Tatsächlich habe ich begonnen, an einem solchen Feature zu arbeiten, und zwar durch zwei Projekte: clang_indexer , die den Quellbaum zum Erstellen durchforsten ein Index auf der Festplatte, und meine Gabel von clang_complete , die die Funktion der Abfrage des Index für Verwendungen des Symbols unter dem Cursor hinzufügt. Das ist eigentlich ein bisschen mehr als das, wonach Sie suchen, weil ich eine Funktion "alle Referenzen finden" anstrebe (mit der Option, die Ergebnisse nur nach Definitionen zu filtern).

Es ist in einem sehr frühen Stadium und ich mache es nur für mich selbst, also erwarte nicht, dass es eine sehr polierte Lösung ist.

    
exclipy 27.09.2011, 12:02
quelle

Tags und Links