web-dev-qa-db-fra.com

Vim: difficulté à configurer les ctags. La source dans les sous-répertoires ne voit pas le fichier de balises à la racine du projet

J'essaie de me configurer avec des ctags (exubérants) sur Vim aujourd'hui et j'ai du mal à le faire fonctionner correctement. Je génère mon fichier ctags sur la ligne de commande avec avec:

cd myproj
ctags -R

Cela place le fichier de balises dans la racine myproj. Cependant, Vim ne semble lire ce fichier de balises que lorsque je travaille sur une source résidant en racine. Lorsque je navigue vers des répertoires plus profonds, si j'essaie de passer à une balise à l'aide de <C-]>, Je reçois:

E433: No tags file
E426: tag not found: MyClassName

J'ai vérifié que MyClassName a une balise dans le fichier de balises, c'est juste que Vim ne la voit pas. Quelqu'un peut-il expliquer comment configurer Vim pour référencer le fichier de balises de la racine?

Merci.

57
Thomas

ajoutez ceci à .vimrc fichier set tags=tags;/

Cela vérifiera le dossier actuel pour le fichier de balises et continuera à remonter d'un répertoire jusqu'au dossier racine.

Vous pouvez donc être dans n'importe quel sous-dossier de votre projet et il pourra trouver les fichiers de balises.

116
Amjith

Il existe une option pour indiquer à Vim où chercher le fichier de balises.

J'utilise la configuration suivante:

" search first in current directory then file directory for tag file
set tags=tags,./tags

Extrait de l'aide:

Lorsqu'un nom de fichier de tag commence par "./", le '.' est remplacé par le chemin du fichier courant. Cela permet d'utiliser un fichier de balises dans le répertoire où se trouve le fichier actuel (quel que soit le répertoire actuel). L'idée d'utiliser "./" est que vous pouvez définir le fichier de balises recherché en premier: dans le répertoire courant ("balises,./Balises") ou dans le répertoire du fichier courant ("./ balises, balises") .

Par exemple:: set tags =./Tags, tags,/home/user/commontags

Et je conserve mon répertoire de travail actuel dans le répertoire de projet supérieur où mon fichier tags est généré.

Utilisation :pwd puis :cd myproj (dans Vim) pour aller dans le répertoire contenant votre fichier de tags.

Voir :help tags-option pour plus d'informations sur le chemin des balises.

Votre problème est probablement que vous vous trouvez dans le mauvais répertoire ou que votre option tags n'est pas correctement définie.

15
Xavier T.

Si vous générez un fichier de balises pour chaque projet, vous aimerez peut-être ce modèle, surtout si vous partagez votre .vimrc sur différentes machines:

let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")                         
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "")

Vous devrez alors définir la variable d'environnement $ REPO_HOME dans votre .bashrc dans votre répertoire repo principal sans l'espace de fin (par exemple /home/<yourusername>/repos) et il recherchera automatiquement un fichier de balises dans chaque sous-répertoire de $ REPO_HOME avec une profondeur de 1, par exemple /home/<yourusername>/repos/myproj/tags.

1
3cheesewheel
#!/bin/sh

FREEZE_NAME=/* Give some version number */

mkdir $HOME/ctags/$FREEZE_NAME

V1=/* Software Path */

find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags

find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags

cd $HOME/ctags/$FREEZE_NAME/

rm -f all.tags

cat c.tags h.tags >> all.tags

sort all.tags > temp.tags

mv temp.tags all.tags

rm -f c.tags h.tags 

Mettez le code ci-dessus dans un fichier .sh et exécutez ... Cela générera à coup sûr vos balises.

1
Devi Piriya Kannan