Navegando el código fuente con Vim

Últimamente se están popularizando muchos editores de código (Atom, Brakets, Sublime Text,…). Pero mucho antes que ellos existieron al menos otros dos: Emacs y Vim. No se muy bien la razón, quizá fue simplemente por el placer de aprender, pero me decidí a aprender a utilizar Vim. Ya llevo un tiempo con ello, aunque el aprendizaje va despacio.

Hay muchas cosas que me encantan de Vim, pero echo de menos algunas cosas que me dan ciertos IDEs: refactorizaciones sencillas, búsqueda en múltiples ficheros, integración con otras herramientas,… En este post voy a contar cómo se puede solucionar el problema de la navegación de código.

Vim lo soluciona con un fichero de tags. Dentro de un lenguaje de programación, un tag es simplemente el nombre de una función, método, clase,… Cada tag va acompañado de una referencia para localizar dónde aparece: básicamente fichero y número de línea. Con la herramienta ctags es posible generar un fichero que sirve a Vim a conocer todas las tags de nuestro proyecto, y mediante comandos de Vim, podemos movernos entre ellas de un fichero a otro.

Uso de la herramienta ctags

Lo primero es instalar la herramienta. Para Linux es tan sencillo como ejecutar un simple comando. Para otros sistemas operativos es también bastante sencillo, pero se recomienda visitar la página del proyecto Exuberant Ctags para conocer más detalles.

$ sudo apt-get install exuberant-ctags

El siguiente paso es generar el fichero de tags de nuestro proyecto:

$ cd /home/rchavarria/my-super-interesting-project
$ ctags -R .

Y por último, indicar a Vim dónde está el fichero de tags que queremos usar. Para ello, una vez el editor está abierto, introducir el comando:

:set tags=/path/to/tags/file

Para facilitar las cosas y no tener que recordar cómo cargar el fichero de tags manualmente, es recomendable poner el comando anterior en el fichero .vimrc, de forma que al abrir Vim cargue siempre el fichero de tags.

Ahora, veamos cómo podemos movernos entre tags. Estos movimientos permiten movernos dentro del mismo fichero, entre ficheros abiertos, o incluso ficheros que no estén abiertos (pero están referenciados en el fichero de tags claro).

Referencias y enlaces relacionados