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.
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.
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.
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
.
#!/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.