2010-10-21 20 views
2

Comment rendre ctags compte de la classe en C++? Quand je saute sur un tag d'une fonction, j'obtiens le même nom de la fonction mais dans une mauvaise classe.ctag ignore les classes en C++

Bb; b.init();

et il y a

A init ::() {} B :: init() {}

je mets le curseur sur init b.init() et le saut est à A :: init() {} au lieu de B :: init() {}.

Remarque, je n'ai pas utilisé a et b dans mon code. donc cela pourrait ne pas fonctionner si vous lancez ctags. Si ce n'est pas un problème commun, je peux poster le code réel.

+0

J'ai essayé "--extra = + q" comme indiqué dans http://ctags.sourceforge.net/faq.html#7. n'a pas aidé –

+0

Utilisez Visual Studio. Il reconnaîtra correctement les jetons plutôt que le même mot. – JoshD

+0

cela n'aidera en aucune façon. Vim doit comprendre C++ pour connaître le type de b, et ce n'est pas le cas. –

Répondre

1

Je ne suis pas au courant d'une méthode pour ce faire, car il faudrait que vim fasse l'analyse C++. Dans cette situation, j'utilise :tselect pour afficher la liste complète et en choisir une.

3

Cela ne résout pas votre problème d'origine, mais une application telle que les éléments suivants peuvent aider:

nnoremap CTRL+] :exe 'tj' expand('<cword>')<CR> 

Cela permettra au moins faire CTRL+] vous montrer un menu de sélection quand il y a plusieurs définitions de init().

0

j'ai écrit lh-tags pour résoudre ce problème [Il faudra lh-vim-lib.]

Il ne reconnaît pas si b est un A ou un B, mais il propose une petite interface graphique pour sélectionner quelle balise nous voulons sauter . Voir en tant que :tselect interactif. Placez le curseur sur un identifiant et tapez <c-w><m-down> en mode normal (qui est configurable). Il propose également des moyens de construire et de mettre à jour la base ctags sur <c-x>ta et sur :w étant donné que g:/b:ctags_dirname a été défini pour le projet en cours.