Comment puis-je exécuter ctags dans une grande base de code?

En supposant que j’ai une structure de répertoire de code comme suit:

/top /second /core a.pl b.pl c.pl /common d.pl e.pl /util f.pl g.pl h.pl 

Où dois-je exécuter les ctags pour que je puisse sauter directement aux définitions de fonctions via vi ?

Par exemple, j’ai eu:

 /dir /perl a.pl 

et je lance en dir la commande ctags -R perl mais dans a.pl je ne pouvais pas sauter à une définition de fonction qui existait dans le même fichier.
Si j’ai fait ctags -R . dans le répertoire perl , cela fonctionnait.

Donc, je ne peux pas comprendre le modèle. Devrais-je lancer ctags dans core, common,util ? Et si ma base de code est énorme? Aurais-je vraiment besoin de l’exécuter dans chaque répertoire?

Normalement, vous utiliseriez un seul fichier de tags situé dans le répertoire racine de votre projet.

Par exemple, pour baliser l’intégralité du code source de Vim, situé dans ~/src/vim-7.3 , vous devez accéder à ce répertoire et y générer le fichier de balises.

 $ cd ~/src/vim-7.3 $ ctags -R 

C’est tout.

Vous pouvez faire la même chose à l’intérieur de Vim, bien sûr. Démarrez Vim, puis tapez:

 :cd ~/src/vim-7.3 :!ctags -R 

Vérifiez que vous avez le bon paramètre 'tags' . La valeur par défaut est ./tags,tags , ce qui signifie que Vim recherchera un fichier de tags dans le répertoire en cours.

Assurez-vous de lire :h 'tags' dans son intégralité. Vous pouvez demander à Vim de rechercher des fichiers de tags en profondeur dans l’arborescence en donnant des modèles contenant des caractères génériques.

Une dernière chose: pour que cette approche fonctionne, le répertoire de travail actuel de Vim doit restr à la racine à tout moment. Si vous avez une option comme 'autochdir' définit ou change constamment de répertoire vous-même, les tags ne seront évidemment pas trouvés.

Votre fichier de tags doit être généré dans le premier ancêtre commun de votre code (ce serait la second , dans votre cas) avec $ ctags -R . .

Je vous suggère d’append cette ligne à votre ~/.vimrc pour que Vim trouve toujours votre fichier de tags , peu importe où vous vous trouvez dans votre projet et quel que soit le “répertoire actuel”:

 set tags=./tags;/,tags;/ 

Cela fonctionne comme la réponse de @ glts avec une tournure intéressante: à cause de la partie ;/ , Vim regarde de haut en bas jusqu’à / pour un fichier de tags . En supposant que vous éditez g.pl , Vim utilisera correctement votre fichier de tags situé en second .

 :h tags :h ctags