2009-11-17 15 views
8

Quiero poder iniciar vim en un subdirectorio arbitrario en mi proyecto y hacer que busque hasta la raíz del proyecto para el archivo tags, y luego buscar en un directorio no relacionado fuera el árbol del proyecto.Consejos para configurar rutas de búsqueda de CTAGS complejas

Por ejemplo digamos que tengo el siguiente:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

Quiero abrir baz.c desde dentro de la bar subdirectorio, tienen que buscar hasta encontrar foo/tags y luego a buscar some/arbitrary/path/tags si no se encuentra el símbolo en foo/tags.

Ahora sé que puedo hacer:

set tags=./tags,tags; 

para llevar a cabo la primera tarea. Aparentemente es el punto y coma que le dice a vim que busque la raíz. Sin embargo ninguno de los siguientes trabajos:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

La primera de ellas se encuentra sólo símbolos de ~/some/arbitrary/path/tags mientras que el segundo sólo encuentra los símbolos en el archivo de etiquetas en la raíz del proyecto.

Alguien sabe cómo hacer esto? Estoy en Linux compre el camino.

+0

Hmm, no creo que el simillo tenga razón. ¿Estás seguro de que estás en el directorio actual en el que crees que estás? Pruebe: pwd desde dentro de vim. He estado usando varias etiquetas separadas con una coma durante años con rutas relativas y absolutas. – Benj

Respuesta

5

que utilizo:

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

Para la generación de etiquetas en la raíz de un proyecto en particular:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

adapté esta configuración de la C++ code completion vim tip.

+1

La división del comando configurado en varias líneas resolvió el problema para mí. Terminé con 'set tags = tags;' en mi '.vimrc' y luego escribí': set tags + = ~/some/arbitrary/path/tags' desde vim. –

0

reemplazar la tilde con la ruta de su casa.

+0

Lo siento, no funciona. Intenté tanto 'set tags =./Tags, tags,/home/myuser/some/arbitrary/path/tags;' y 'set tags =./Tags, tags;/home/myuser/some/arbitrary/path/tags' –

+0

¿cómo lo pruebas? ¿Qué está pasando exactamente? Creé un archivo de etiquetas en un directorio de programación mío, edité mi .vimrc para incluir esa ruta en "establecer etiquetas", usando la tilde como punto de partida. Luego, hice un archivo ficticio, test.c, en mi directorio personal (por lo tanto, no en el directorio con el archivo de etiquetas), escribí el nombre de una función que se incluiría en el archivo de etiquetas y presioné "ctrl-] "con el cursor sobre la función. Me llevó justo donde se suponía que debía hacerlo. – Derek

+0

Configuré manualmente la ruta de búsqueda dentro de vim. Lo pruebo buscando dos símbolos, un símbolo de un archivo separado en el mismo proyecto cuyo archivo de etiquetas está en algunos directorios en la raíz del proyecto, y luego buscando un símbolo del archivo de etiquetas externas en la ruta arbitraria. Dependiendo de la versión del camino que uso, encuentro un símbolo, o el otro, pero nunca ambos. –

0

Su primera opción "fijar las etiquetas de" funciona para mí en Linux. (Como en, lo he hecho antes, y lo recreé para estar seguro.) Puede tener muchas rutas diferentes en su opción de etiquetas, tanto absolutas como relativas. Sin embargo, en el segundo, tiene un punto y coma en el medio de la lista, que es incorrecto. De hecho, no necesitas ningún punto y coma. También reemplazaría el ~ con la ruta absoluta a su casa, por si acaso, y eliminaría el punto y coma todos juntos. Solo tiene comas entre cada camino.

Ah, y para buscar un directorio para el archivo de etiquetas, es necesario "../tags", no "./tags". Un único punto significa el directorio actual, dos puntos significa el directorio uno arriba de donde se encuentra.

+0

¿Podría publicar exactamente cómo lo recreó ya que parece que no puedo hacerlo funcionar? –

+0

¿Está abriendo el archivo desde la raíz del proyecto o desde el subdirectorio? Estoy abriendo el archivo desde un subdirectorio en el proyecto, no desde la raíz del proyecto. –

+0

Esto es lo que tengo: set tags =./TAGS,./Tags, tags, TAGS, ~/programming/mandelbrot/main/tags donde el último directorio es la ruta absoluta. Como mencioné anteriormente, no buscará en ningún directorio padre, ya que no estoy usando ../tags. – Derek

0

es el archivo de las etiquetas siempre en el proyecto/directorio? Si es así, no necesita "buscar" para encontrar el archivo de etiquetas. Sólo codificar el camino a los dos archivos como este:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

Si no, usted puede intentar algo como esto:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

No he probado esto por lo que podría tener que experimentar con él. Hay algunas condiciones previas para que funcione. Ver: ayuda a buscar archivos.

0

La sintaxis de una sola línea de etiquetas conjunto debe ser:

set tags=./tags,tags;,~/some/arbitrary/path/tags 

La coma faltaba después de "etiquetas";

Cuestiones relacionadas