Navegar entre etiquetas de código en Emacs
A veces me enseñan bonitos programas de edición de texto (Atom, Sublime,
Pero sí es verdad que suelen ser cosas muy útiles, como saltar a la definición de una función o clase, directamente desde el fichero donde la estés utilizando. Era algo también a lo que estaba muy acostumbrado de mis tiempos con Eclipse.
A mi me gusta investigar como lo podría hacer con Emacs y usando herramientas estándar GNU a ser posible. Y cuando empiezas a tirar un poco del hilo, resulta que Emacs lo tenía previsto todo ¡nunca lo dudé!
GNU Global ([1]) es un sistema de etiquetado de código fuente que soporta un buen montón de lenguajes. La versión que empaqueta Debian es muy antigua, por tanto vamos a proceder a compilar e instalar la última versión.
wget http://tamacom.com/global/global-6.5.7.tar.gz
tar xf global-6.5.7.tar.gz
cd global-6.5.7
./configure --disable-gtagscscope
make
sudo make install
La interfaz en Emacs para hacer uso de GNU Global es el paquete ggtags
[2]. Instalaremos este paquete de la manera habitual:
M-x package-install [RET] ggtags
En emacs por defecto no existen el concepto de proyecto como un conjunto de ficheros relacionados entre sí. Pero desde el momento en que ejecutamos el analizador de código que busca las etiquetas ya tenemos un proyecto. Iremos al directorio raíz de cualquier proyecto. En este caso trabajo con Laravel, así que voy a la raíz y ejecuto:
gtags
Si todo va bien, habrá creado tres archivos: GPATH, GRTAGS y GTAGS. Estos serán la base que utilizará ggtags
para buscar las definiciones de los símbolos que conforman nuestro código (funciones, clases, interfaces, traits, etc.). Otra de las ventajas es que esos archivos se pueden usar desde otro editor, como Vim. Hemos separado la tarea de generar las tablas de símbolos de la tarea de usar esas tablas para navegar entre los ficheros de un proyecto, ese es el espíritu Unix.
Volvemos a emacs y activamos el modo ggtags
:
M-x ggtags-mode
En este momento si nos colocamos sobre un símbolo (por ejemplo sobre una función) veremos que se destaca (si estamos en el modo X de emacs, no en el terminal). Estando sobre el símbolo, haremos uso de la combinación:
M-.
Y emacs nos abrirá el fichero donde se define la función, en la línea adecuada. Hay muchas más opciones para este modo, que podremos curiosear haciendo uso del nuevo menú Ggtags
que habrá aparecido en el menú de emacs. Este suele ser el más común (saltar a la definición) y conviene aprenderse el atajo.
Cuando cambie el código y se vayan añadiendo y/o quitando funciones, clases y demás artefactos, hay que actualizar las tablas. Esto se puede hacer más rápido -siempre que hayas ejecutado gtags
al menos una vez- con:
global -u
¡Que no te convenzan para cambiar a un editorcillo! ¡Emacs puede con todo!
Referencias:
- GNU Global Página principal
Perpetrado el 04 de julio de 2017 por una IN (Inteligencia Natural), la mia, con cierto esfuerzo.
Archivado en categoría(s) Uncategorized
Deja una respuesta