Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.org

Navegando por el código C con el vi

El editor vi, aunque es complejo de aprender, es uno de los editores más potentes que hay. Una vez aprendidos sus comandos, permite realizar tareas muy complejas con la pulsación de un par de teclas.

Una posibilidad bastante desconocida del editor vi es que permite navegar por el código C. Si tenemos un tipo de código C (un enumerado, una estructura, una función,... ) que se está usando en el código que se está editando, podemos ir fácilmente al fichero que define ese tipo y que el cursor se situe exactamente en el sitio en que está definido el tipo. Vamos a ver cómo

El comando ctags

En unix/linux tenemos el comando ctags. Este comando, pasándole varios ficheros .h y .c genera un fichero (que por defecto se llama tags) en el que pone un índice con todos los tipos definidos en el programa C, en qué fichero y en qué línea se encuentran.

Su sintaxis es más o menos esta

$ ctags -t <fichero.h> <fichero.c> ...

La opción -t hace que se pongan en el fichero índice también los typedef.

Si nuestros ficheros de código están en varios directorios, hay que poner alguna forma cómoda de buscarlos.

Supongamos, por ejemplo, que tenemos un directorio /users/chuidiang/MI_PROYECTO y que de ahi para abajo hay subdirectorios en los cuales están nuestros .h y nuestros .c. Una forma cómoda y rápida de ejecutar este comando para todos nuestros ficheros es la siguiente

$ cd /users/chuidiang/MI_PROYECTO
$ ctags -t `find . -name *.c -name *.h`

El comando find, tal cual está escrito ahi, buscará del directorio actual hacia abajo todos los ficheros .h y .c. Para que este comando se ejecute y el resultado se pase a ctags, es necesario encerrarlo entre esas comillas que aparecen. Atención al sentido de las comillas. No es lo mismo ` que '  y en el comando se usan las primeras.

El resultado de esto es un fichero tags en el que están todos los tipos de nuestro proyecto.

Usando el vi con el fichero tags

Todo lo que hagamos a partir de ahora con el vi, lo hacemos en el directorio en el que está el fichero tags, en nuestro ejemplo en /users/chuidiang/MI_PROYECTO.

Desde la línea de comandos de la shell, para ir directamente a donde está definido un tipo o una función, basta con poner

$ cd /users/chuidiang/MI_PROYECTO
$ vi -t MiTipo

Esto abrirá el vi en el fichero .h o .c en el que se define ese tipo. Situará el cursor justo en la definción del tipo.

Una vez abierto el fichero en el vi, si queremos ir hasta otro tipo, bastará con ejecutar el comando de vi :ta

:ta OtroTipo

Esto nos llevará a la definción del otro tipo, aunque esté en otro fichero y en otro directorio.

Un pequeño ejemplo de uso

Supongamos que lo tenemos todo preparado (hemos ejecutado el comando ctags, estamos editando con el vi nuestro código y estamos en el directorio que contiene el ficheto tags). Queremos usar la función imprimir() que nos hicimos en otro fichero y no nos acordamos exacatmente de los parámetros que lleva. Nos podemos ir a esa función escribiendo

:ta imprimir

Una vez en la definición de la función imprimir(), con sus parámetros, y el vi en modo de comandos, la siguiente secuencia de teclas nos copia la línea con la definición de la función en un buffer.

"ayy

Ahora, con el comando

:#

volvemos al fichero que estábamos editando, justo en el sitio que lo teníamos. Con la siguiente pulsación de teclas (con el vi en modo comandos), se copia la linea de la función imprimir(), con sus parámetros, que habíamos guardado en el buffer.

"ap

Listo, ya tenemos la función imprimir() con sus parámetros escrita en el editor. Ahora sólo tenemos que modificar los parámetros para que sean los nuestros.

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007: