2009-06-28 5 views

Respuesta

54

Creo que la manera más fácil es usar "g ctrl-]" en lugar de solo "ctrl-]". Si solo hay una coincidencia, te llevará allí. Si hay varias coincidencias, se enumerarán todas, lo que le permitirá elegir la que desea, al igual que: tselect. Lo mejor de ambos mundos.:)

+0

Parece prometedor, lo comprobaré, gracias. –

+0

Para mí, esto me da dos declaraciones directas (en diferentes archivos) de funciones que comparten el nombre. Pero no muestra la implementación de la función. – frankster

+0

Wow. Eso es un cambio de vida. – Praxeolitic

8

Debería poder utilizar tn y tp para saltar a las diversas etiquetas coincidentes.

  • Presione ^] para ir a la primera partida.
  • Si esa no es la coincidencia que desea, escriba :tn para pasar a la siguiente.
  • Si escribió :tn demasiadas veces puede escribir :tp para volver al anterior.
1
:tselect my_little_function 

y que se obtendría una lista de coincidencias. o si se salta a una etiqueta y no está satisfecho con él, a continuación, escriba

:tselect 

Y se obtiene una lista de alternativas para la última etiqueta activa.

8

Creo que Vim va a la primera etiqueta en el archivo de etiquetas de forma predeterminada. Puede seleccionar uno diferente si lo prefiere: use :tj (similar a: tselect, pero salto automático si solo hay una coincidencia) o Ctrl-] seguido de :tn).

La única forma de cambiar el valor predeterminado es cambiar el orden del archivo de etiquetas, pero no creo que ctags ofrezca una opción de línea de comandos para hacerlo.

Esto no es tan difícil como parece, ya que básicamente se necesita un script que abra el archivo de etiquetas, lo clasifique por el "tipo" de etiqueta y lo vuelva a escribir. El 'tipo' en la etiqueta es un solo caracter que describe si es una función (f), un prototipo de función (p), una macro, un nombre enumerado, etc. etc. Si está usando Linux, podría, en teoría, ser tan simple como:

#!/bin/sh 
ctags -R -f - . | tac > tags 

Desde tac invierte el orden de las líneas en un archivo, este se pone automáticamente la definición por primera vez. Sin embargo, se vuelve un poco más complicado ya que el encabezado debe mantenerse y Vim prefiere que el archivo de etiqueta sea ordenado, por lo que es mejor revisar el archivo y ordenar la primera entrada (el nombre de la etiqueta) en orden de avance y luego tipo en orden inverso. Por lo tanto, algo más complicado puede ser mejor.

Pido disculpas por el enchufe desvergonzado, pero he escrito un complemento Vim que (indirectamente) hace lo que necesita. Está destinado a agregar muchos grupos de resaltado adicionales para cosas como nombres de funciones, macros, enumeraciones, etc. Sin embargo, una de las otras cosas que hace es reordenar el archivo de etiquetas para que la implementación de la función llegue antes de la declaración de la función, por lo tanto logrando lo que quieres (tuve la misma necesidad que tú). Si no quiere ninguna de las funcionalidades de resaltado, probablemente podría despojarlo con bastante facilidad: es un programa de Python bastante simple y un script de Vim aún más simple y está disponible en my site.

1

Esta opción me funcionó mejor

Ponga la siguiente línea en el .vimrc y ahora se puede usar doble clic del ratón (en el variable/entry en su archivo) para saltar a la ubicación marcada. Si se encuentra una coincidencia única, saltará de inmediato. Si hay varias entradas son coincidencias, se le pedirá a la entrada del usuario ..

:map <2-LeftMouse> g< c-]> 
1

Añadir lo siguiente a su archivo .vimrc:

noremap <c-]> 2<c-]> 

Esta línea hace que vim para saltar automáticamente al segundo partido (en vez del primero), que generalmente es la definición de la función.

1

tarde a la fiesta, pero para entrantes de Google etiqueta vim:

que he encontrado que el uso de cscope además de ctags es el camino a seguir, al menos para C/C++. Es más inteligente acerca de los árboles de llamadas, y puede configurarlo para que vuelva a los ctags si falla. Simplemente ejecute "cscope -b" cada vez que ejecute ctags -R. y estarás listo para irte Si usa la configuración a continuación, podrá usar Ctrl -]/Ctrl-T como siempre, pero también puede agregar nuevos saltos ingeniosos como saltar a una declaración de función y mostrar un jumplist de llamadores de función.

" setup 
if has("cscope") 
    set csto=0                    
    set cst 
    set nocsverb 
    " add any database in current directory 
    if filereadable("cscope.out") 
    cs add cscope.out 
    " else add database pointed to by environment 
    elseif $CSCOPE_DB != "" 
    cs add $CSCOPE_DB 
    endif 
    set csverb 
endif 

" jump to a function declaration 
nmap <silent> <C-\> :cs find s <C-R>=expand("<cword>")<CR><CR>1<CR><CR> 
" show a list of where function is called 
nmap <silent> <C-_> :cs find c <C-R>=expand("<cword>")<CR><CR> 
+0

¿Qué quieres decir? por 'Just r un "cscope -b" cada vez que ejecuta ctags -R '? ejecutar cscope -b antes de ejecutar ctags -R? ¿o después? –

0

Hay varias maneras de hacer que Vim para saltar a una etiqueta directamente, si sólo hay una lucha en parejas, de lo contrario presentar una lista de coincidencias de etiquetas.

Puede usar el comando 'tjump' ex. Por ejemplo, el comando ':tjump func1' saltará a la definición func1, si está definida solo una vez. Si func1 se define varias veces, se presentará una lista de etiquetas coincidentes.

Puede colocar el cursor sobre la etiqueta y presionar g Ctrl-].

Puede seleccionar visualmente un texto y presionar g Ctrl-] para saltar o enumerar las etiquetas coincidentes.

Puede usar el comando 'stjump' ex. Esto abrirá la etiqueta correspondiente o seleccionada de la lista de etiquetas en una nueva ventana.

Puede presionar Ctrl-W g Ctrl-] para hacer un: stjump.

Help: :tjump, g_Ctrl-], v_g_CTRL-], :stjump, Ctrl-W_g_Ctrl-] 
0

Puede pulsar continuación CTRL +], esto irá directamente al segundo partido, en Java, esto es por lo general la ejecución de alguna de las interfaces.

Cuestiones relacionadas