Vim auto-générer ctags
Droit maintenant, j'ai la suite dans ma .vimrc
:
au BufWritePost *.c,*.cpp,*.h !ctags -R
Il y a quelques problèmes:
- C'est lent -- régénère les tags pour les fichiers qui n'ont pas changé depuis la dernière balise génération.
- Je dois pousser le bouton enter nouveau après l'écriture du fichier en raison de l'inévitable "appuyez sur Entrée ou de type de commande à continuer".
Lorsque vous combinez ces deux questions, je finis par pousser supplémentaire entrer trop tôt (avant ctags -R
a fini), puis voir l'ennuyeux message d'erreur, et avez qu'à appuyer sur entrée à nouveau.
Je sais que ce ne pas sembler une grosse affaire, mais avec la quantité de fichier écrit-je faire sur un jour donné, il tend à devenir vraiment ennuyeux. Il doit bien y avoir une meilleure façon de le faire!
Vous devez vous connecter pour publier un commentaire.
au BufWritePost *.c,*.cpp,*.h silent! !ctags -R &
L'inconvénient est que vous n'aurez pas utile balises du fichier jusqu'à la fin. Aussi longtemps que vous êtes sur un *nix système, il devrait être ok pour faire de multiples écrit avant que la précédente ctags terminé, mais vous devez le tester. Sur un système Windows de ne pas mettre en arrière-plan et il va se plaindre que le fichier est verrouillé jusqu'à ce que le premier ctags finitions (ce qui ne devrait pas causer des problèmes dans vim, mais vous vous retrouverez avec un peu obsolète fichier de tags).
Note, vous pouvez utiliser le
--append
option tonylo suggère, mais alors vous devrez peut-être désactivertagbsearch
qui peut signifier que l'étiquette de recherches prendra beaucoup plus de temps, selon la taille de votre fichier de balises.ctags: Warning: ignoring null tag in public/jquery.form.js
). Je viens redirigé stderr vers /dev/null et qu'il fixe, mais je ne sais pas à propos de problèmes avec les balises.autocmd BufWritePost *.rb,*.js silent! !/usr/local/bin/ctags -R 2> /dev/null &
Modifier: Une solution très bien le long des lignes de ce qui suit a été posté sous la Balise automatique script vim. Notez que le script besoin d'un vim avec le support de Python, cependant.
Ma solution shells pour awk au lieu de cela, donc, il faut travailler sur plusieurs systèmes.
Notez que vous ne pouvez l'écrire de cette façon dans un script, sinon il a qu'à aller sur une seule ligne.
Il y a beaucoup de choses là-bas:
Cette auto-commande déclenche lorsqu'un fichier a été détecté comme C ou C++, et ajoute à son tour un tampon local auto-commande est déclenchée par l'
BufWritePost
événement.Il utilise le
%
espace réservé qui est remplacé par le tampon du nom de fichier au moment de l'exécution, en collaboration avec le:gs
modificateur utilisé pour le shell-citer le nom de fichier (en tournant intégré unique-devis en devis-escape-citation-citation).De cette façon, il exécute une commande shell qui vérifie si un
tags
fichier existe, auquel cas son contenu est imprimé, sauf pour les lignes qui font référence à la juste fichier de sauvegarde, en attendantctags
est appelée sur le tout nouveau fichier enregistré, et le résultat est ensuitesort
ed et de les remettre en place.Mise en garde réalisateur: cela suppose que tout est dans le même répertoire, et que c'est aussi la mémoire tampon locale répertoire courant. Je n'ai pas donné toute la pensée de chemin de déformation.
J'ai écrit easytags.vim pour faire juste cela: mettre à jour automatiquement et de mettre en évidence les balises. Le plug-in peut être configuré pour la mise à jour, le fichier en cours d'édition ou tous les fichiers dans le répertoire du fichier en cours d'édition (de manière récursive). Il peut utiliser un mondial des balises du fichier, type de fichier spécifique des balises de fichiers et de projets spécifiques des balises de fichiers.
set updatetime=30000 "trigger autocmds after half a minute of user inactivity instead of after 4 seconds
↵set swapsync="" "disable swap file sync on user inactivity trigger
J'ai remarqué que c'est un vieux thread, cependant...
Utilisation incron sous *nix comme des environnements de soutien inotify. Il sera toujours lancer des commandes à chaque fois que les fichiers dans un répertoire de changement. c'est à dire,
Que c'est.
Peut-être utiliser l'ajout de l'argument de ctags comme l'ont démontré:
http://vim.wikia.com/wiki/Autocmd_to_update_ctags_file
Je ne peux pas vraiment se porter garant pour ce que j'utilise généralement source d'idées pour le code de la navigation, mais utiliser vim comme éditeur... allez comprendre.
Comment avoir ctags planifiée pour s'exécuter via crontab? Si l'arborescence de votre projet est assez stable dans sa structure, qui devrait être faisable?
Pour supprimer le message "appuyez sur enter" de l'invite, utilisez :silent.
Sur OSX cette commande ne fonctionne pas hors de la boîte, au moins pas pour moi.
J'ai trouvé un post, qui explique comment obtenir la norme ctags version qui contient l'option-R. Seul, cela n'a pas fonctionné pour moi. J'ai dû ajouter /usr/local/bin à la variable PATH dans .bash_profile afin de ramasser la poubelle où Homebrew installe des programmes.
Dans mon opninion, plugin Indexation est mieux.
http://www.vim.org/scripts/script.php?script_id=3221
Il peut être:
1) un add-on pour project.tar.gz
2) un plugin indépendant
Il y a un plugin vim appelé Balise automatique pour ce qui fonctionne vraiment bien.
Si vous avez taglist installé, il va également mettre à jour pour vous.
La
--append
option est en effet la voie à suivre. Utilisé avec ungrep -v
, nous pouvons mettre à jour un seul tagged fichier. Par exemple, voici un extrait d'un mat plugin qui traite de cette question. (NB: Il faudra un "externe" bibliothèque plugin)Ce code définit:
^Xta
pour forcer la mise à jour des balises de base pour tous les fichiers dans le projet en cours ;^Xtc
pour forcer la mise à jour des balises de base pour le courant (non enregistrées) fichier ;et il prend en charge et de nombreuses options pour désactiver la mise à jour automatique où nous n'en voulons pas, pour accorder ctags appels en fonction de types de fichiers, ...
Il n'est pas juste un conseil, mais un petit extrait d'un plugin.
HTH,
Auto Tag est un plugin vim qui met à jour des fichiers de balises sur enregistrer.
Je l'ai utilisé pendant des années sans problèmes, à l'exception que celui-ci applique une taille maximale sur les tags des fichiers. Sauf si vous avez un très grand ensemble de code indexés dans le même fichier de tags, vous ne devriez pas frapper cette limite, si.
Noter que la détection Automatique de la Balise nécessite le support de Python dans vim.