2.0 - Aprender vi.



2.0 - Aprender vi.

Estos son algunos consejos para el usuario "novato" de vi. Primero, ten cerca de ti una buena chuleta con los comandos. Un poco más adelante en este mismo documento encontrarás un pequeño manual de referencia rápida. Segundo, consíguete un buen libro sobre el vi (bueno... Si no un libro, en la red hay varios buenos documentos que lo cubren.). Este documento no es la mejor forma de aprender vi, porque no trata el tema de una forma "pedagógica", sino que simplemente sirve para resolver problemas. Si vas a comprar un libro, ten cuidado a la hora de escogerlo, y comprueba previamente que contenga ejercicios que puedas utilizar para ir probando lo que vas aprendiendo.

También puedes tratar de conseguir vilearn o vitutor, que están diseñados para enseñar los conceptos básicos del vi.

2.1 - Qué juegos me servirán para aprender?

Bueno... Podrá parecer un poco tonto, pero hay algunos juegos basados en UNIX que nos podrán ayudar para aprender vi. La clave está en que estos juegos suelen utilizar un juego de teclas muy similar al juego de teclas utilizado por el editor para realizar las tareas básicas. Las teclas principales que nos enseñarán son las de movimoento de cursor: hjkl. NetHack, rouge, moria, omega worm y snake son ejemplos válidos de este tipo de juegos.

2.2 - Cuál es la diferencia entre los modos Comando y Edición?

El vi diferencia entre dos modos de trabajo diferentes: El modo Comando y el modo Edición. Esta diferenciación ha sido alabada y criticada a la vez, ya que es una de las principales causas de errores a la hora de escribir, y es una de las principales ventajas que tiene a la hora de acelerar nuestro trabajo. Comprender esta diferencia y acostumbrarse a ella es VITAL para aprender y trabajar con este editor.

Cuando comenzamos a trabajar, el vi está en modo Comando. En este modo, casi cualquier pulsación de tecla que realicemos se interpretará como un comando, y tendrá el consiguiente efecto sobre nuestro texto. De esta forma, podremos movernos por el texto, borrar, remplazar, cortar, pegar, etc... El modo Edició es aquel en el que editamos realmente nuestro texto, y cualquier pulsación de tecla se convertirá en texto que hemos añadido al documento.

Los comandos que nos ponen en modo Edición son a, i, c, C, O, o y otros.

<Esc> o ^C nos sacará del modo Edición y nos volverán a llevar a modo Comando.

Acostúmbrate a esta diferencia, ya que es la que hace al vi totalmente diferente al resto de los editores convencionales. También es lo que hace que podamos realizar la gran mayoria de las tareas sin necesidad de retirar las manos del teclado (Ideal para los que saben mecanografía).

2.3 - Hey! Un momento! Mi teclado no tiene la tecla <Esc>! Qué debo hacer?

Prueba a pulsar ^[ . Si tu teclado tiene una tecla <Meta> , prueba con ella. Si no te funciona ninguna de estas, entonces prueba con ^3.

2.4 - Qué son todas esas tildes (~)?

Esas tildes están para indicarte que las líneas que hay al final del fichero no pertenecen realmente al texto, que están ahí sólo para "rellenar" hasta el final de la pantalla. Desde el final del documento hasta el final de la pantalla verás que aparecen estas tildes.

2.5 - No me consigo acostumbrar a hjkl. Alguna sugerencia?

Primero que nada, si tu terminal está configurado correctamente, deberías poder utilizar las teclas de cursor (si las tienes). De todas formas, si vas a utilizar mucho el vi, deberías aprenderte las pulsaciones hjkl, ya que son más rápidas de escribir. Además, si utilizas la Korn-Shell, son necesarias para editar las líneas de comando.

De todas formas, y siempre estando en modo comando, podrás utilizar las teclas <Del> y <espacio> para moverte a la izquierda y a la derecha respectivamente.

2.6 - Cómo puedo salir sin grabar?

Tienes que utilizar el comando :q! . Si el vi parece que se te ha "quedado colgado", puede ser que hayas pulsado ^S por error. La pulsación de ^S suele significar XOFF, lo que le indica al UNIX que tu terminal no puede recibir más información. El UNIX entonces no te enviará más texto hasta que se le envíe un XON (que se corresponde con el carácter ^Q).

2.7 - Cómo puedo insertar un fichero?

:r <Fichero>

Por ejemplo, para insertar el fichero /etc/motd, escribe: :r /etc/motd

Esto insertaá el fichero en la posición actual del cursor. Si especificas un número antes de la r insertará el fichero en la línea especificada.

2.8 - Cómo se realizan búsquedas de texto?

/<texto> Busca hacia adelante. ?<text> Busca hacia atrás. ?? o // repiten la última búsqueda. Ademñas, podrás utilizar los comandos n y N para repetir la búsqueda hacia adelante y hacia atrás respectivamente. Cuando especificamos el texto que buscamos podremos utilizar las expresiones regulares ( puedes encontrar información sobre esto en regexp(5)).

2.9 - Y cómo busco una secuencia de escape?

/^V^<seq>

^V le indica al vi que tome el siguiente carácter literalmente, y que no lo interprete como un comando.

2.10 - Cómo formateo el texto?

Si tu ordenador tiene el comando fmti, todo lo que has de hacer es picar !}fmt desde el modo Edición. Esto rejustificará el texto desde la posición actual hasta el final del párrafo. De todas formas, ten cuidado: Al menos en HP-UX el comando fmt sirve para formatear un array de discos, y no para formatear texto! :-). En el caso de que no tengas el comando fmt, entonces tenrás que buscar un programa similar.

2.11 - Cómo se copia texto?

Bueno... esto es un poco complicado de explicar, pero espero que seguro que lo podremos conseguir.

El comando "<letra>yy

copia una línea de texto en el registro <letra>. (Un registro es un buffer donde el vi guarda información que se ha cortado o copiado) El valor de <letra> debe estar entre "a" y "z".El comando "<letra>dd borra una línea y la pone en el registro <letra>. También podremos utilizar un número anter de los comandos yy y idd, para especificar cuántas líneas queremos cortar o copiar en el registro. Si utilizamos YY o DD (en mayúsculas), entonces no sustituiremos el contenido del registro, sino que dejaremos con el contenido original.

Los comandos "<letter>p y "<letter>P pegan el contenido del registro <letra> antes y después de la posición actual del cursor respectivamente. Si el registro contiene un principio o un final de línea, el texto se pegará en otra línea según sea necesario. Normalmente utilizaremos el comando y (de yank) seguido de cualquier comando de movimiento, lo que indicará poner en el registro indicado por la letra (o en el registro por defecto si no especificamos ninguna) el texto situado entre el cursor y el final del comando de movimiento. Así, el comando y$ pondrá en el registro por defecto todo el texto situado desde el cursor hasta el final de línea; el comando yH copiará desde el cursor hasta el principio del fichero, y así sucesivamente. Hay que tener en cuenta que cuando utilizamos el registro o buffer por defecto, cualquier otro comando de borrado (dd, dw, x, etc...) borrará también el contenido de este registro. Mas exactamente, el registro por defecto es el que se utiliza para implementar el comando u (de Undo, deshacer).

Por ejemplo, para mover el párrafo anterior tendríamos que posicionarnos en el principio del párrafo y teclear "a16dd. A continuación nos posicionaríamos donde lo queramos pegar y pulsaríamos "ap, con lo que pegaríamos las 16 líneas que contiene el registro a en la línea inferior.

Si lo que necesitas es cortar y pegar áreas de texto que no están acabadas en un principio o final de línea, lo que has de hacer es marcar una de las posiciones (origen o final del movimiento) utilizando el comando m<letra>, que te marca la posición actual del cursor. Luego, podremos expresar este comando de movimiento (según lo que pone en el párrafo anterior) utilizando el carácter ` seguido de la letra que hemos utilizado para marcar la posición. Así para marcar una posición con el nombre z pulsaremos mz y luego, para copiar al buffer a todo el texto comprendido entre la posición del cursor y la marca z, picaremos "ay`z . Luego, para pegar este texto en otro sitio, nos desplazaremos y picaremos "ap .

Una nota para los editores en castellano y otras lenguas "de 8 bits". El carácter ` es el que se utiliza para indicar graves o acentos abiertos, así que si utilizamos una marca cuyo nombre sea una vocal no podremos recuperar esa posición posteriormente (siempre y cuando nuestro entorno de trabajo esté correctamente configurado y soporte letras como àèìòù).

2.12 - Arrrg!!! He picado dG y he perdido todo el texto! Qué puedo hacer? (O si no, qué debo hacer cuando me equivoco?

El comando u deshace el último comando ejecutado. El comando U (en mayúsculas) deshace los cambios realizados en la línea actual, siempre y cuando no hayamos cambiado de línea. El comando :e! lee de nuevo el fichero que estamos editando, sin grabar ninguna modificación. Además, el texto borrado se almacena en los registros del 1 al 9, con lo que "<n>p pega el texto borrado en la posición <n>. Podremos encontrar rápidamente el texto borrado si pulsamos "1pi , luego pulsamos u (para deshacer la inserción) y probamos con el siguiente. A fin de facilitar esta tarea, el comando . en este caso en lugar de repetir el último comando, lo hará con el siguiente registro. De esta forma, tendremos que picar "1p u . u . u ... hasta encontrar y deshacer la operación de borrado que buscábamos.

2.13 - Acabo de terminar mi documento y me dicen que tengo que entregar cada sección en un fichero diferente. Qué hago?

El comando :[m],[n]w <fichero> graba las líneas de la m a la n en <fichero>. Este mecanismo de utilizar numeración de líneas funciona con casi todos los comandos del modo Ex (los que comienzan por :) Si utilizas :[m],[n]w >> <fichero> se añadirá el texto al final del fichero.

2.14 - Qué hay de esos comandos que comienzan con :?

Los comandos que empiezan por : son comandos del editor ex. Nos proporcionan una gran flexibilidad, como buscar y remplazar con opciones avanzadas.


[Indice][Siguiente][Anterior]
Esta versión de las Faq de vi ha sido recopilada por:Baruch Promislow de Macom Networking LTD.
La versión en castellano ha sido realizada por: Antonio Valle, de Abast Systems, S.A.

(C)opyright, E. Larry Lidz, 1994, 1995. All Rights Reserved.
(C)opyright, Antonio Valle, 1996. Todos los Derechos Reservados.