2010-02-22 20 views
5

he instalado vim 7.2 y ctags 5.8 y he creado el archivo de etiquetas con "ctags -R/foopath".Tratando de ir a la definición de clase/función en vim

tengo muchos métodos que se llaman con el mismo nombre en varias clases, por lo que si pongo el cursor en una función que llama y ejecuto ": etiqueta" que muestra la primera de las etiquetas de la lista. Si ejecuto ": tn" varias veces finalmente encuentro el método ...

Así que mi pregunta es: ¿hay alguna manera de mostrar directamente la ruta donde está la clase que contiene el método correcto que estoy llamando ?

Respuesta

3

:tselect tagname le dará una lista de etiquetas coincidentes, y puede ingresar el número de la etiqueta que desea.

:stselect tagname se dividirá la ventana primero.

También puede colocar el cursor sobre una palabra e ingresar g] para obtener una lista de etiquetas que coincidan con esa palabra.

<CTRL-W>] dividirá la ventana e irá a la primera etiqueta que coincida con la palabra debajo del cursor.

<CTRL-W>g] dividirá la ventana y le dará la lista de coincidencias.

+0

Gracias Dave, pero creo que no me entendiste o tal vez no lo explicamos bien. Déjame ver: imagina que he etiquetado varias clases (clase1, clase2, clase3, etc.) que tienen el método foo(). Si tengo este código: $ class3_object = new class3(); class3_object-> foo(); Me gustaría ir _directly_ a la etiqueta correspondiente a class3, porque es la clase del objeto "class3_object". Javi – ziiweb

0

Puede leer los datos brutos de las etiquetas en un búfer con taglist(). Luego puede buscar en el búfer otros criterios que le interesen, incluidos nombres de clases y partes del directorio de archivos.

Así que para tener una búsqueda más refinada de probarlo "mytag":

:new | put =taglist(\"^mytag$\") 

Para obtener la máxima información, asegúrese de usar Exuberant Ctags.

Después de buscar los datos que desea, verá el nombre del archivo asociado con la etiqueta con el prefijo 'nombre': y el texto línea con el prefijo 'cmd':.

Ponerlo en una función con algo de código para embellecer y manejar debidamente el almacenamiento intermedio:

" List information about matching tags in a buffer 
function! BrowseTags(tagStr) 
    new [Tag Brower] 
    setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap 

    put =taglist(a:tagStr) 

    " Beautify it a little 
    normal 1G 
    while search('^{', 'W') 
    call setline(".", split(getline("."), "\\(\\(}$\\)\\|\\('\\w\\+':\\)\\)\\@=")) 
    endw 
    normal 1G 
endfunc 

Usted puede utilizar BrowseTags de llamadas ("^ myTag $") para ejecutar la función para una exacta partido de myTag, o use algunas expresiones regulares para obtener coincidencias similares.

Aunque nunca me he molestado en hacerlo, no es demasiado difícil escribir varios comandos para automatizar las tareas más comunes sin abrir un búfer.

Cuestiones relacionadas