2011-11-27 18 views
13

Tengo mis proyectos en la carpeta/srv/http/dev. Me genera archivos ctags para un proyecto:VIM establecer ctags en .vimrc

$ ctags -R --languages=php . 

Ahora establecer la ruta ctags:

:set tags=/srv/http/dev/proj/tags 

y está funcionando bien.

Pero tengo muchos proyectos en dev/folder. ¿Cómo puedo establecer ctags en el archivo .vimrc? set tags=tags no funciona correctamente.

Y me gustaría generar archivos de etiquetas presionando la tecla de acceso directo en la carpeta seleccionada de NERDTree. Probé:

nmap <silent> <F4> 
    \ :!ctags -R 
    \ --languages=php .<CR> 

Pero crea fichero de etiquetas en la carpeta de inicio y muestra advertencias sobre la carpeta de inicio de exploración ..

EDIT: Como @Alexandru Plugaru aconsejó que debería utilizar g: NERDTreeFileNode.GetSelected () función.

Solo soy usuario novato de vim, entonces tengo una pregunta más. He añadido en mi archivo .vimrc:

function createTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str 
    exec ':!ctags -R --languages=php ' . curNodePath 
endfunction 
nmap <silent> <F4> :execute createTags()<CR> 

Pero presionando F4 veo:

E117: Unknown function: createTags 
E15: Invalid expression: createTags 

EDIT 2: Gracias a @Alexandru Plugaru Tengo esto:

function CreateTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str() 
    exec ':!ctags -R --languages=php -f ' . curNodePath . '/tags ' . curNodePath 
endfunction 
nmap <silent> <F4> :call CreateTags()<CR> 

¡Y funciona! Al presionar F4 obtengo el archivo de etiquetas en la carpeta del proyecto.

+1

try: call createTags() también intenta nombrar la función con una letra mayúscula. –

Respuesta

3

Esto se debe a que el directorio actual de vim es el directorio de inicio. O necesita cambiar la ruta o crear el plugin nerdtree. Consulte el directorio nerdtree_plugin para ver un ejemplo. Creo que usted encontrará esta función interesante:

g:NERDTreeFileNode.GetSelected()

+0

Gracias, creo que es lo que necesito. ¿Puedes responder más preguntas por favor? Ver mi EDIT. –

+0

Respondí en la publicación original –

-1

en su uso .vimrc:

set tags+=tags,/srv/http/dev/proj/tags 

creo que la coma es el separador adecuado.

+0

Ok, son trabajos. Pero ¿qué pasa con más proyectos? Después de crear un nuevo proyecto, ¿debo agregar la ruta completa a este nuevo proyecto? Y así una y otra vez? ¿Puede ser que se pueda automatizar? –

+0

usando './tags;' como se menciona en otra respuesta es muy preferible a las rutas de codificación difícil en .vimrc. –

+0

también puede usar https://github.com/embear/vim-localvimrc para tener un "vimrc local" por proyecto donde defina etiquetas diferentes. –

28
  1. Las funciones se supone que deben comenzar con una letra mayúscula. Cambie createTags a CreateTags.

  2. Para utilizar específica del proyecto tags archivos que tendrá que añadir algo así a su .vimrc:

    set tags=./tags,tags; 
    

    para que Vim busca un archivo tags en el directorio actual primero y arriba y arriba hasta que se lo encuentra. Además, me gusta set autochdir: el directorio de trabajo es siempre el que contiene el archivo actual.

+0

Entiendo lo que quiere decir, pero no puedo entender cómo hacerlo) Agregué 'set tags =./Tags, tags' y' set autochdir' en mi archivo .vimrc. Pero las etiquetas no se fundan porque vim comienza a encontrarlas desde/home ... –

+0

Vim empieza en casa porque probablemente sea el directorio de trabajo. ¿Qué dice ': pwd'? – romainl

+0

': pwd' muestra el directorio correcto del archivo de edición actual. –

Cuestiones relacionadas