Je viens de commencer à utiliser des CTAG et d'apprécier grandement l'outil, mais la façon dont je gère mon fichier de tag est quelque peu encombrante à mon avis et très inflexible. P>
Comment je gère actuellement mon fichier de tag: p>
~ / .vim / tags code> li>
- Lorsque je mettez à jour mon code ou modifiez des projets, je exécutez un script qui supprime l'ancien fichier de balise et régénère le fichier de balises monolithique (vous devez modifier l'emplacement de l'endroit où les CTAGs sont exécutés lorsque vous modifiez des projets) LI>
ol>
Avoir un fichier de tag monolithique fonctionne pour moi car il me permet de sauter à tous les symboles pertinents du projet actuel que je travaille. p>
Un seul fichier de tag monolithique ne fonctionnera pas pour une grande / énorme codeBase? Pourquoi un énorme fichier de tags ne fonctionnerait-il pas sur une grosse-code gros / énorme? Strong> p>
Quels sont les autres moyens de gérer votre fichier de tag (ou des fichiers de balise pluriel)? strong> p>
et pourquoi votre nouvelle méthode de gestion de vos fichiers de tag est meilleure? strong> (vraisemblablement une meilleure solution serait parfois plus complexe. Donc, si votre solution est plus complexe, je vous demande quel est le plus complexe. bénéficier à une méthode plus complexe de gestion de vos fichiers de tag.) p>
P.s. J'ai trouvé une question Stackoverflow parle de CTAG appelé " vimctags-astuces-and-astuces " mais cette La question ne parle pas de la gestion de vos fichiers de tag. p>
4 Réponses :
Je mettez mon fichier Pour les gros codesbases, je réduit simplement la fréquence à laquelle je le mettez à jour. Je ne le mettant habituellement à la mettre à jour que si j'essaie de sauter à un mot clé et que ce n'est pas là pour une raison quelconque. Après tout, le but est de passer rapidement à une autre partie du code, et s'il y arrive par quelque moyen que ce soit, il a fonctionné même si le fichier de balise est obsolète. P> tags code> dans le répertoire de projet. Qui empêche les étiquettes séparées pour chaque projet. P>
+1 sur l'approche. J'utilise également cscope - et j'ai un script shell à trois linois qui reconstitue les fichiers pour les deux quand ils deviennent obsolètes.
Tout comme Greg, je garde le fichier de balise dans le répertoire de projet. J'utilise ensuite Projet Plugin avec c'est Je ne mettant généralement que mettre à jour le fichier Tags lorsqu'il y a eu des changements importants car la balise vous permettra généralement de vous rendre à la ligne droite (ou au moins presque la bonne ligne) même si elle est obsolète. La raison principale que je mettez à jour est si j'ai ajouté une nouvelle enum, la structure ou similaire et que je veux le Syntaxe de balise en surbrillance à mettre à jour. P> in = Code> Tag Pour configurer l'emplacement du fichier de balise et s'il faut utiliser la récursivité lors de la régénération des balises code> code> et cscope.out code> pour différents projets. P>
Une approche que j'ai récemment devenue friandise utilise des crochets VCS (Version Control Systems) pour générer les fichiers CTAGS. J'utilise un git localement même pour de petits projets et tels, et les CTAGs sont donc mis à jour à chaque fois que je vous engage (c'est évidemment possible avec tous les autres VCS qui existe). P>
Personnellement, j'aime bien placer le fichier CTAGS dans chaque répertoire de projet, mais cette approche devrait fonctionner tout aussi bien au niveau mondial. P>
edit fort>: Les crochets VCS sont des scripts ou des programmes exécutés automatiquement lorsque certaines actions sont effectuées, telles que la caisse, commettre, revenir et d'autres. Les crochets sont généralement disponibles dans tous les VCS que j'ai heurtés et je suis sûr que vous pourrez trouver une documentation pour celle que vous avez choisie d'utiliser. P>
Pour une lecture supplémentaire, je suggère les liens suivants: p>
Je ne sais pas ce que "Crochets VCS" sont. Peut-être que vous pourriez élaborer un peu plus sur les crochets VCS et la façon dont il sait que les étiquettes Regen lors de l'engagement?
J'ai mis à jour la réponse et j'espère qu'il fournit plus d'informations maintenant. Je serai heureux de préciser davantage si nécessaire.
Crochets côté client ou côté serveur? Je pense que le côté du client est meilleur pour ce que vous voulez faire, mais Subversion ne fait pas de côté client.
Sauf pour les plugins VIM pour lesquels je n'ai qu'un seul fichier Tags, j'ai également une base de données CTAGS par projet. P>
Cela implique deux choses: p>
setLocal Tags = ... code> (/ SetLocal Tags + = code>) joue son rôle. Li>
ol>
La plupart des périodes Les projets ne partagent pas les étiquettes. En conséquence, je suis content de détecter le projet actuel pour définir automatiquement où je mettez à jour les balises et où je les lis. Ce sont deux cas d'utilisation distincts et Vim ne traite que (natif) le dernier. Les plugins qui gèrent le premier cas d'utilisation doivent spécifier une variable (local tampon) pour stocker les informations. P>
En réalité, lors de la sauvegarde d'un fichier ne doit mettre à jour qu'une seule base de données de balises spécifiques, nous devrons peut-être récupérer des balises pour plusieurs bases à la fois. C'est un cas d'utilisation que j'ai lorsque je travaille sur des bibliothèques / projets qui dépend de l'autre: j'ai souvent besoin de vérifier quelque chose dans le code (~ 3ème parti) que j'importe. J'aurais pu utiliser des options globales et balises code>, mais j'ai choisi (pour l'instant) pour avoir des valeurs distinctes dans des tampons distincts. Encore une fois, ce cas d'utilisation est pris en charge grâce au plugin local-VIMRC que j'utilise. P>
En ce qui concerne la mise à jour de la base de données Tags, elle est faite dans un Plugin (que je suis en train de maintenir , mais il existe d'autres personnes ayant des capacités similaires): je supprimai les balises associées au fichier actuel à partir de la base de données des balises de projet associés, puis je mettez à jour l'option -a code> en arrière-plan. Il n'est vraiment pas nécessaire d'analyser le projet complet à chaque fois que nous enregistrons un fichier. p>
Dans le cas, les fichiers du projet sont mis à jour en dehors de la portée VIM, j'ai toujours la possibilité d'exécuter des balises sur l'ensemble du projet. Bien que tout soit transparent avec commettez des crochets, je suis en mesure de mettre à jour le dictionnaire VIM Spell Crevere afin de ne pas signaler les identificateurs de code comme des mots mal orthographiés. Je soupçonne que ce serait un peu plus fastidieux avec une approche pure d'une hameçon. P>