2010-10-06 9 views
4

J'ai récemment commencé à utiliser ctags sur mes projets. J'ai actuellement la configuration suivante:Chemin pour les tags dans VIM pour plusieurs projets

root/tags [contains all non-static tags] 
root/foo/tags [contains static tags for the foo directory] 
root/bar/tags [static] 
root/something/else/tags [etc.] 
... 

je peux set tags=./tags,tags,/path/to/root/tags et tout fonctionne parfaitement.

Cependant, mon problème est que je travaille sur plusieurs projets à la fois, donc j'ai, par exemple, /path/to/root1, /path/to/root2, et /path/to/root3 en même temps. Je préfère ne pas définir manuellement les balises chaque fois que j'ouvre un fichier; Y at-il une manière que je peux avoir des étiquettes au /path/to/rootX basé sur le dossier que je édite? ? (Par exemple, si je suis d'édition /path/to/root3/foo/x.c, utilisez les balises dans root3/tags

Dans mon cas, tous mes projets partagent un répertoire parent commun, ce que je veux vraiment quelque chose comme:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "") 

mais Je ne peux pas sembler obtenir le bon vimfu pour le faire fonctionner

EDIT: Je viens de réaliser que cela ne fonctionnera pas, je ne peux pas réellement écrire à root*. Au lieu de cela, je voudrais stocker mon principal ctags fichier dans ~/ctags/root*/tags, où il existe un mappage 1: 1 entre les sous-répertoires de ~/ctags/ et /path/to/ [Pour ceux qui peuvent se demander, ce sont des vues dynamiques ClearCase UCM; ni /view/XXX/ ni /view/XXX/vobs/ est éditable]

Répondre

2

Si ce que vous voulez est:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "") 

Essayez:

let &tags = './tags,tags,' . substitute(expand("%:p:h"), "\(^\/path\/to\/.*/\).*$", "\1", "") 

Il n'y a pas d'expansion dans une commande :set. De plus, "%: p: h" ne sera pas développé automatiquement, utilisez donc expand(). Voir:

:help :let-option 
:help expand() 
Questions connexes