Después de generar un archivo de etiquetas con exuberant-ctags
puedo saltar de una llamada de función a su declaración con lo <C-]>
cual es bastante conveniente.
Mi pregunta es cómo hacerlo de otra manera. Cuando mi cursor está en la definición de una función, ¿cómo puedo ir a las líneas donde se llama la función?
Cuando miro el archivo generado por ctags solo veo información relacionada con la ubicación de la definición y no de las llamadas, ¿significa que no puedo hacer eso, que Vim es una solución inteligente o que necesito usar algo? más que exuberant-ctags
?
Respuestas:
No puede saltar a las llamadas de función con
ctags
. Para C / C ++ y Java existecscope
, y se integra muy bien con Vim (ver:help cscope
). Para otros idiomas, puede encontrar una herramienta que genere / exportecscope
bases de datos compatibles (fihscope
para Haskell, ystarscope
para Ruby, Go y JavaScript). También se puede utilizarcscope
con GNU globales bases de datos, señalandocscopeprg
agtags-cscope
.En una nota al margen: si no se desanima por el uso desconcertante de Engrish ,;) probablemente también desee usar ctags universales en lugar de
exuberant-ctags
. Este último no se ha actualizado en años. El primero es un tenedor mantenido activamente.fuente
cscope
es compatible con C / C ++, Lex y Yacc. El soporte para Java es marginalmente útil. Puede obtener soporte para PHP (antiguo) PHP y JavaScript de GNUglobal
, a través de lagtags-cscope
utilidad. Y, como dije anteriormente, hay otros indexadores que pueden exportarcscope
bases de datos compatibles.No puedes hacer eso con ctags.
Pruebe una alternativa más robusta como cscope (que incluso tiene su propia sección de ayuda :)
:help cscope
o global .fuente
cscope
sí mismo no admite ni PHP ni JavaScript. Sin embargo, puede indexar archivos PHP y JavaScript con GNUglobal
, luego ejecutargtags-cscope
para usar elgtags
archivo resultante concscope
.cscope
las fuentes en lugar de especular basándose en experimentos rápidos.cscope
tiene un analizador de C bastante relajado. Eso es todo lo que tiene, y todo lo que hace. Con ese analizador "soporta" muchos idiomas, para valores adecuados de "soporte". Las construcciones se reconocen siempre que se vean más o menos como C. Por eso no se reconocen las clases de Java y las construcciones PHP más nuevas. Compare fi con starscope , que en realidad permite agregar nuevos idiomas.Puede usar el comando grep de Vim para buscar todos los archivos en su proyecto:
Pongamos eso en una combinación de teclas:
Encuentro esta búsqueda clave de todo el proyecto invaluable cuando estoy explorando una gran base de código desconocida.
\<
y\>
son secuencias regexp que indican el inicio y el final de una palabra, por lo que no obtendrá coincidencias parciales. (La-w
opción de grep podría ser otra forma de lograr esto).Sin embargo, esta es una búsqueda poco inteligente , por lo que puede producir falsos positivos si la misma palabra aparece en contextos no relacionados.
A decir verdad, utilizo mi propia versión modificada del complemento grep.vim . Esto es un poco más amigable de usar:
src/ lib/
lugar de.
) y recuerda los cambios.\b
debe usarse en lugar de\<
y\>
.Lo configuro y excluyo algunos archivos estándar como este .
Para un acceso rápido, creo dos combinaciones de teclas . F3me permite editar la línea de comandos, F4usa la línea de comandos configurada previamente sin ninguna pulsación de tecla adicional. El mecanismo es bastante feo y podría usar algo de limpieza, pero me ha servido bien.
fuente