Ayuda OnLine de GULiC

Anon1129

Ayuda
  • Temática: Puedes preguntarnos sobre Software Libre, Linux o GULiC. Otros temas pueden ser respondidos (o no!)
  • Acceso: Para mantener tu anonimato, se te ha asignado un nick al azar (Anon1129). Si deseas identificarte, puedes solicitar tu inscripción como socio ó iniciando sesión, si ya lo eres. En cualquier caso, si usas jabber, puedes informarte de cómo entrar a esta sala con tu cliente habitual, o bien entrando vía jwchat.
  • Uso: Para ver el chat más grande, usa ésta página. Si vas a pegar textos grandes, mejor usa nuestro pastebin. Para avisar de errores o problemas, usa nuestro trac.
  • Horarios: Nuestro huso horario es WET. No te extrañe si a las 5 de la mañana no te responde nadie.
  • Foros: Si nadie te responde al momento, deja tu mensaje en nuestro foro de libre acceso después de oir la señal... Beep!

VI & VIM

VI & VIM

VI es un editor de texto visual, de pantalla completa, basado en el editor de línea ex. Es un editor poco intuitivo y con mala prensa entre los estudiantes que dan sus primeros pasos en Linux/UNIX, pero por otra parte es el editor favorito de los usuarios avanzados y de muchos programadores. Es además un editor que se puede encontrar en cualquier sistema UNIX, desde antiguas estaciones Sun Solaris o HP-UX hasta las más recientes distribuciones de GNU/Linux o FreeBSD, OpenBSD, etc.

VI es además un editor muy potente, que permite hacer complicadas operaciones en grandes ficheros con unos pocos comandos, por lo que su aprendizaje puede ahorrarnos mucho tiempo. Otra ventaja de VI es que al ser tan corriente suele encontrarse incluso en disquetes de rescate. Lógicamente poco se puede rescatar si no se sabe manejar el único editor disponible en un momento de emergencia.

Pero el manejo de VI es realmente incómodo si nos enfrentamos a la versión clásica. Por ejemplo no podemos usar los cursores para movernos por el texto, debemos pasar al llamado modo comando y utilizar letras para movernos.

En este curso utilizaremos el editor VIM. VIM significa Vi IMproved (en español VI Mejorado), y como su nombre indica es un clon (muy) mejorado del clásico editor VI. VIM es bastante más amigable que VI, ya que permite un uso más intuitivo (p.ej. los cursores y otras teclas para moverse). Además, si se compila adecuadamente (y suele ser así) incorpora coloreado de sintaxis para casi todos los lenguajes de programación y ficheros de configuración que puedas encontrar en Linux/UNIX. Otra característica muy interesante de VIM es la posibilidad de utilizar un interfaz gráfico, lo que aumenta el confort y mejora el rendimiento del programador.

Lo primero que hay que aprender con VI es la filosofía de los dos modos de trabajo: el modo comando y el modo edición. El modo comando se utiliza solamente para dar órdenes al editor, decirle que haga cosas como borrar una línea, buscar un patrón, ir a una determinada línea, guardar el fichero, salir, etc. El modo edición se utiliza solamente para escribir texto en el fichero. Es muy importante familiarizarse con esta filosofía de funcionamiento, ya que resulta imprescindible para cualquier operación que se quiera realizar con VIM.

En adelante nos referiremos al editor como VI cuando digamos algo que sea común a todas las versiones de VI, y como VIM cuando se trate de extensiones propias de VIM.

Para ejecutar este editor el comando es vi. Si tienes instalada otra versión de VI pero quieres utilizar VIM no hay problema, simplemente ejecuta vim. Si quieres utilizar la interfaz gráfica de VIM ejecuta gvim.

Aunque conserva el nombre de VI estamos trabajando con VIM. Este comando admite varias opciones que se le pueden pasar como parámetros, p.ej. el nombre del fichero que queremos editar:

$ vi fichero

También puedes especificar la línea en la que quieres empezar con el parámetro +n. Por ejemplo para empezar en la línea 12:

$ vi fichero +12

VIM comienza siempre en modo comando, preparado para realizar operaciones sobre el fichero. Una de estas operaciones es pasar al modo edici’on. Esta transición puede hacerse de 8 formas diferentes.

i Comienza a insertar texto en la posición del cursor.

a Comienza a insertar texto en la posición siguiente a la del cursor.

o Comienza a insertar texto en una nueva línea debajo del cursor.

s Borra el carácter en la posición del cursor y comienza a insertar texto.

I Comienza a insertar texto al principio de la línea.

A Comienza a insertar texto al final de la línea.

O Comienza a insertar texto en una nueva línea encima del cursor.

S Borra la línea en la posición del cursor y comienza a insertar texto.

Tabla 5.1: Pasar el modo edición en VI

Para pasar del modo edición al modo comando basta con pulsar ESC. A continuación vamos a editar un pequeño fichero para familiarizarnos con sus comandos básicos. Comenzamos invocando al editor desde la línea de comandos (suponemos que estás utilizando la interfaz gráfica, aunque también puedes prescindir de ella):

$ gvim hola.c

[PIC]
Figura 5.1: Interfaz gráfica de VIM con un fichero nuevo (vacío)

La última línea de la interfaz (o de la consola) debería parecerse a esto:

"hola.c" [New File] 0,0-1 All

Esta línea es la barra de estado del editor. Es aquí donde teclearemos los comandos y donde aparecerá cierta información como el modo en el que estamos (comando, edición, reemplazo, etc.), la línea y columna en la que estamos, el porcentaje del documento en el que estamos, si el fichero ha sido salvado y su tamaño.
A continuación pulsamos la tecla i para pasar al modo edición. Observamos que la barra de estado se muestra diferente:

-- INSERT -- 0,1 All

Ahora es el momento de teclear, escribe el siguiente código:

#include <stdio.h>

int main()
{
printf("Hola Mundo\n");
}

[PIC]
Figura 5.2: Interfaz gráfica de VIM con código C coloreado

Cuando tengas esto escrito, pulsa ESC para pasar al modo comando. Entonces teclea la orden :w y pulsa Enter. Veremos como la orden :w aparece en la barra de estado mientras la tecleamos, y luego al ejecutarla se muestra información sobre el resultado, en este caso información sobre el fichero que acabamos de guardar.

"hola.c" [New] 6L, 62C written 6,1 All

En esta línea VI nos indica que ha escrito el fichero hola.c, que es nuevo, que tiene un tamaño de 62 caracteres en 6 líneas. Además al terminar de escribirlo estamos en la línea 6 y en la columna 1, y podemos ver todo el fichero.

Si tu versión de VIM tiene soporte para coloreado de sintaxis probalmente ya estará funcionando y verás las palabras int e include de distinto color. Sin aún no estás viendo el código coloreado prueba a pasar al modo comando (pulsando ESC) y ejecutar el comando :syntax on (para los comandos que empiezan en : hay que pulsar Enter al final). Si te devuelve el mensaje de que esa función no está implementada es que no tienes disponible el coloreado de sintaxis. Si por el contrario funciona pero no te gusta y quieres quitarlo ejecuta el comando :syntax off y desaparecerán los colores. En la interfaz gráfica de VIM hay un menú Esquemas de colores dentro del menú Editar. También puedes cambiar el esquema de colores desde la interfaz de consola del VIM con el comando :colors esquema. Por ejemplo, activa el coloreado de sintaxis y ejecuta :colors koehler.

En adelante, el comando x significará pulsar la tecla x en modo comando, el comando :letras significará teclear :letras en modo comando y pulsar Enter. Cualquier comando del primer tipo puede modificarse teclando un número, lo que hará que se ejecute ese número de veces (el comando 4x es equivalente a xxxx). Si te equivocas tecleando cualquier comando puedes cancelarlo pulsando Esc.

Para deshacer cualquier operación realizada pulsamos en modo comando la tecla u. Para salir del editor sin guardar el fichero utiliza el comando :q!. Probablemente realizarás esta operación con mucha frecuencia al principio, cuando se cometas algún error grave como teclear una palabra sin pasar al modo edición. En el modo comando cada tecla tiene su función, y es diferente además si está en mayúsculas que si está en minúsculas. Por lo tanto, una regla de oro con VI es: cuando no sepas con qué comando hacer algo, no pruebes teclas al azar. Tampoco es nada bueno utilizar la tecla. Y por supuesto, cuando estés editando algo importante guarda el fichero con frecuencia con el comando :w, sobre todo en las primeras semanas de uso. Para salir de VI guardando el fichero utiliza el comando :x.

Una utilidad que te puede resultar interesante es ejecutar comandos del sistema desde la misma consola en la que estamos trabajando con el VIM. En modo comando escribimos :!comando, por ejemplo, si escribimos :!ls nos mostrará un listado de archivos del directorio en el que nos encontramos. Esto te permite compilar programas o documentos mientras editas uno o más ficheros de código fuente, incluso puedes ejecutar una consola de sistema desde el editor, con el comando :sh

Para buscar palabras dentro de un documento es fácil, solo tienes que escribir en modo comando /palabra y si salen varios resultados, pulsando n pasarás al siguiente y pulsando N al anterior. Si prefieres que la búsqueda sea hacia atrás (desde el final hacia el principio del fichero) el comando que necesitas es ?palabra. También con esta búsqueda pasas de un resultado a otro pulsando n.

Si lo que necesitas es desplazarte por un documento muy grande (como por ejemplo el código fuente de un programa) a líneas concretas VIM lo soluciona. Para desplazarnos a la línea 60 de un documento, escribe en modo comando 60 y luego pulsa S-g o G. Si pulsas sólo S-g o G te desplazas al final del fichero, y si pulsas gg (pulsas g dos veces seguidas) te desplazas al principio del fichero.

Para desplazamientos más cortos dispones del comando 0 (cero) que te sitúa el principio de la línea, ^ que te sitúa en el primer caracter no blanco (espacio o tabulador) de la línea, $ que te sitúa al final de la línea, w te sitúa al principio de la siguiente palabra, y b hace lo mismo con la anterior palabra. El comando ) te desplaza a la siguiente frase, mientras que ( te desplaza a la anterior. Del mismo modo puedes utilizar { y } para saltar de párrafo en párrafo.

Si en lugar de desplazarte por el fichero lo que quieres es borrar parte de su contenido estos mismos comandos, pulsando previamente d, hacen lo siguiente: d0 borra desde el principio de la línea hasta justo antes del cursor, D o d$ borra desde el cursor hasta el final de la línea, dw borra desde el cursor hasta el principio de la siguiente palabra, db borra desde justo antes del cursor hasta el principio de la palabra en la que se encuentre el cursor, dd borra la línea en la que se encuentre el cursor, dj borra la línea en la que se encuentre el cursor y la que estén justo debajo, 34dj borra la línea en la que se encuentre el cursor y las siguientes 34 líneas que estén justo debajo, d) borra desde el cursor hasta el principio de la siguiente frase, d (borra desde el cursor hasta el principio de la frase en la que se encuentre el cursor, d} borra desde el cursor hasta el final del párrafo en la que se encuentre el cursor, d{ borra desde el cursor hasta el final del párrafo anterior.

A lo mejor te interesa pegar en otro sitio ese trozo de fichero que has borrado, o prefieres copiar y pegar en lugar de cortar y pegar. Claro que puedes hacerlo con VI y seleccionando exactamente lo que quieras. Para seleccionar una parte del fichero sitúate en un extremo de la selección (principio o final), pulsa v y desplázate hasta el otro extremo de la selección. Para cancelar la selección pulsa Esc. Una vez que tienes el texto seleccionado puedes cortarlo pulsando d o copiarlo pulsando y.

Para pegar lo que has copiado o cortado has de situar el cursor en la posición deseada y contemplar dos opciones para pegar el texto: pulsando p el texto se insertará justo después del cursor, pulsando Shift-p o P el texto se insertará justo antes del cursor.

Cuando cortas o copias una región de texto ésta se guarda en una zona de memoria, lo que se denomina un buffer. Mientras no salgas de VIM este buffer se conserva completamente hasta que vuelvas a cortar o copiar otra región. Ten cuidado porque borrar algo con cualquier comando también se considera cortar, por lo que sobreescribe el buffer. Este buffer se conserva además entre ficheros, por lo que puedes cortar o copiar en un fichero y pegar en otro, siempre que no salgas del editor para hacer esta maniobra. Si sales del editor se conserva sólo una parte del buffer, suele ser suficiente para regiones no muy grandes, pero no te confíes1 .

Si quieres cortar o copiar de un fichero y pegar en otro lo mejor es que abras ambos ficheros con el mismo VI, simplemente ejecutando:

$ vi fichero1 fichero2

Con esto tienes varios ficheros abiertos, con un buffer para cada uno (aquí entendemos buffer en el sentido con el que lo hacemos al hablar de Emacs en la sección ??) y puedes pasar de un buffer a otro con el comando :bN donde N es el número del buffer (se numeran empezando por 1). Para pasar de un buffer a otro primero debes guardar a fichero el buffer en el que te encuentres (con el comando :w).

Otro comando que te ayudará si tienes que programar es el comando %. Si estás trabajando con algunos lenguajes cuyas sintaxis manejan con mucha frecuencia (, { o { , VIM te permite con pulsar la tecla % situarte sobre uno de estos caracteres que te muestre el de cierre o apertura que le corresponda.