Vim: dificultad para configurar ctags. La fuente en los subdirectorios no ve el archivo de etiquetas en la raĆz del proyecto
(4)
Hay una opción para decirle a Vim dónde buscar el archivo de etiqueta.
Utilizo la siguiente configuración:
" search first in current directory then file directory for tag file
set tags=tags,./tags
Extracto de ayuda:
Cuando un nombre de archivo de etiqueta comienza con "./", el ''.'' se reemplaza con la ruta del archivo actual. Esto hace posible usar un archivo de etiquetas en el directorio donde está el archivo actual (sin importar el directorio actual). La idea de usar "./" es que puede definir primero qué archivo de etiquetas se busca: en el directorio actual ("etiquetas,. / Etiquetas") o en el directorio del archivo actual ("./tags,tags") .
Por ejemplo:: set tags =. / Tags, tags, / home / user / commontags
Y mantengo mi directorio de trabajo actual en el directorio superior del proyecto donde se genera mi archivo de tags
.
Use :pwd
y luego :cd myproj
(dentro de Vim) para ir al directorio que contiene su archivo de etiquetas.
Consulte :help tags-option
de :help tags-option
para obtener más información sobre la ruta de las etiquetas.
Su problema es probablemente que se encuentra en el directorio incorrecto o que la opción de tags
no está configurada correctamente.
Estoy tratando de configurarlo con ctags (exuberantes) en Vim hoy y estoy teniendo dificultades para que funcione correctamente. Genero mi archivo ctags en la línea de comando con:
cd myproj
ctags -R
Esto pone el archivo de etiquetas en la raíz myproj. Sin embargo, parece que Vim solo lee de este archivo de etiquetas cuando estoy trabajando en la fuente que reside en la raíz. Mientras navego hacia directorios más profundos, si intento saltar a una etiqueta usando <C-]>
, obtengo:
E433: No tags file
E426: tag not found: MyClassName
He verificado que MyClassName tiene una etiqueta en el archivo de etiquetas, es solo que Vim no lo ve. ¿Puede alguien explicar cómo configurar Vim para hacer referencia al archivo de etiquetas de la raíz?
Gracias.
Si genera un archivo de etiquetas para cada proyecto, es posible que le guste este patrón, especialmente si comparte su .vimrc
en diferentes máquinas:
let repohome=substitute($REPO_HOME, "//", "/////", "g")
let &tags=substitute(expand("%:p:h"), "//(".repohome."/.//{-}////).*", "//1tags", "")
Luego deberá establecer la variable de entorno $ REPO_HOME en su .bashrc
en su directorio repo principal sin el espacio final (ej. /home/<yourusername>/repos
) y automáticamente buscará un archivo de etiquetas en cada subdirectorio de $ REPO_HOME con una profundidad de 1, p. ej. /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
Coloque el código anterior en un archivo .sh y ejecútelo ... Esto generará sus etiquetas con seguridad.
set tags=tags;/
Esto verificará la carpeta actual del archivo de etiquetas y continuará un directorio hasta llegar a la carpeta raíz. ASÍ PUEDES estar en cualquier subcarpeta de tu proyecto y podrá encontrar los archivos de etiquetas.