Pregunta

Utilizo principalmente vim/gvim como editor y estoy considerando usar una combinación de lxr (la referencia cruzada de Linux) y también alcance o etiquetas para explorar la fuente del kernel.Sin embargo, nunca he usado ninguno de los dos. alcance o etiquetas y me gustaría saber por qué uno podría elegir uno sobre el otro teniendo en cuenta mi uso de vim como editor principal.

¿Fue útil?

Solución

ctags permite a dos características: que le permite saltar de función llama a sus definiciones, y la terminación omnidireccional. La primera significa que cuando usted tiene más de una llamada a un método, golpeando g] o CTRL-] saltará al lugar en el que se define o se implementa dicho método. El segundo medio de característica que cuando se escribe o foo. foo->, y si foo es una estructura, a continuación, se mostrará un menú emergente con el campo de terminación.

cscope también tiene la primera característica - el uso de set cscopetag - pero no la última. Sin embargo cscope, además, añade la posibilidad de saltar a cualquiera de los lugares en los que una función se llama así.

En lo que a saltar en torno a una base de código se refiere, ctags referida solamente le llevará hacia el lugar donde se lleva a cabo la función, mientras que cscope usted puede mostrar que una función se llama también.

¿Por qué elegir uno sobre el otro? Bueno, yo uso los dos. ctags es más fácil de configurar, más rápido para correr y si sólo se preocupan por saltar de una manera que le mostrará menos líneas. Usted sólo puede ejecutar :!ctags -R . y g] simplemente funciona. También permite que la cosa completa omnidireccional.

Cscope es ideal para grandes bases de código desconocidos. La puesta en marcha es un dolor porque cscope necesita un archivo que contiene una lista de nombres de archivos para analizar. Asimismo, en vim, por defecto no existen asociaciones de teclas creados - es necesario ejecutar manualmente :cscope blah blah

.

Para resolver el problema puño Tengo un cscope_gen.sh escritura del golpe que se ve así:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

Esto busca de código que me interesa, crea la lista cscope.files y crea la base de datos. De esa manera puedo correr. ": Cscope_gen.sh" en lugar de tener que recordar todos los pasos de configuración

Mapa de la búsqueda cscope a Ctrl-Espacio x 2 con este fragmento, lo que mitiga la otra decepción de cscope:

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

Hay este plug-in cscope_maps.vim que pone en marcha un grupo de fijaciones similares. Nunca puedo recordar lo que significan todas las opciones, por lo que tienden a pegarse a ctrl-espacio.

Así que para concluir: ctags es más fácil de configurar y sobre todo funciona sin hacer mucho más, es vital para omni-completa también. cscope ofrece más características, si usted tiene que mantener una base de código grande y en su mayoría desconocidos, pero requiere más trabajo de la pierna.

Otros consejos

Estuve en la misma situación hace unos meses...

La falta de precisión de ctags es una molestia..., y creo que cscope es mucho mejor para todas las cosas relacionadas con macros (y hay un montón de macros en el kernel de Linux).

En cuanto al uso, eso es realmente sencillo... simplemente escribes cscope -R en la raíz de tu kernel y luego no tienes nada de qué preocuparte...(Quiero decir, si solo quieres explorar, es perfecto...)

Luego, todas las combinaciones de teclas se basan en Ctrl-\ (puede reasignarlas si es alérgico a Ctrl), utiliza principalmente s y g....,

Al desarrollar para el kernel, no necesitaba tanto completarlo...

De todos modos, opte por cscope, esto es mucho más conveniente y preciso.

Hmm ... probablemente debería utilizar etags en lugar de ctags ...

Si utiliza cscope, a continuación, se puede ver cadenas de llamadas, es decir, que llama a esta función y que funciona hace esta llamada de función?

No estoy seguro de si esto se puede hacer usando etags / ctags ...

Eso es sólo una característica ... ¿qué hay de encontrar el archivo que contiene una definición de función en particular? Esto se obtiene sólo en cscope.

Yo uso ambos cscope y etags, ambos son buenos para diferentes cosas, sobre todo cuando se trabaja con una gran base de código, como el núcleo de Linux. De hecho, empecé a usar cscope y etags cuando empecé a trabajar con el núcleo de Linux / Xen.

LXR no es muy grande, porque hay que hacer clic, ir a través de la red, etc., mientras que usted puede construir las bases de datos cscope etiquetas y de código del kernel y no tienen que ir a través de la red (a diferencia de LXR).

sugiera el uso para generar GTAGS globales. Podría usar vim complemento gen_tags integrar generar GTAGS con vim.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top