ant

EL EDITOR VI
3.12

sig

3.12 Usando el editor vi

Un editor de texto es simplemente un programa usado para la edición de ficheros que contienen texto, como una carta, un programa en C, o un fichero de configuración del sistema. Mientras que hay muchos editores de texto disponibles en Linux, el único editor que está garantizado encontrar en cualquier sistema UNIX es vi el "visual editor". vi no es el editor más fácil de usar, ni es muy autoexplicativo. De cualquier forma, como es tan común en el mundo UNIX y es posible que alguna vez necesite usarlo, aquí encontrará algo de documentación.

La elección de un editor es principalmente una cuestion de gusto personal y estilo. Muchos usuarios prefieren el barroco, autoexplicativo y potente Emacs un editor con mas características que cualquier otro programa único en el mundo UNIX. Por ejemplo, Emacs tiene integrado su propio dialecto del lenguaje de programación LISP y tiene muchas extensiones (una de ellas es el programa "Eliza" como programa de IA).

Pero como Emacs y todos sus ficheros de soporte es relativamente grande, puede que no tenga acceso a el en muchos sistemas.

vi , por otra parte, es pequeño y potente, pero mas difícil de usar. De cualquier modo, una vez que conozca la forma de funcionamiento de vi, es muy fácil usarlo. Simplemente la curva de aprendizaje es bastante pronunciada al comienzo.

Esta sección es una Introduccion coherente a vi no discutiremos todas sus características, solo aquellas necesarias para que sepa como comenzar. Puede dirigirse a la pagina de manual de vi si esta interesado en aprender mas acerca de las características de este editor, o puede leer el libro Learning the vi Editor de O'Reilly and Associates. Vea el Apéndice A para información.

3.12.1 Conceptos

Mientras se usa vi, en cualquier momento estará en uno de tres posibles modos de operación. Estos modos son conocidos como modoordenes, modo inserción y modo ultima linea. Cuando inicia vi, esta en el modoordenes. Este modo le permite usar ciertas ordenes para editar ficheros o cambiar a otros modos. Por ejemplo, tecleando "x" mientras está en el modoordenes, borra el carácter que hay debajo del cursor. Las teclas del cursor mueven este por el fichero que estamos editando. Generalmente, las ordenes usadas en este modo son solo de uno o dos caracteres de longitud.

Habitualmente insertará o editará texto desde el modo inserción. Usando vi, probablemente dedicará la mayor parte del tiempo en este modo. Inicia el modo de inserción al usar una orden como "i" (para "insertar") desde el modo de ordenes. Una vez en el modo de inserción, ira insertando texto en el documento desde la posición actual del cursor. Para salir del modo de inserción y volver al de ordenes, pulse [esc].

Modo ultima linea es un modo especial usado para proporcionar ciertas ordenes extendidas a vi. Al usar esos comandos, aparecen en la ultima linea de la pantalla (de ahí el nombre). Por ejemplo, cuando teclea ":" desde el modo de ordenes, entrará en el modo ultima linea, y podrá usar ordenes como "wq" (para escribir el fichero a disco y salir de vi), o "q!" (para salir de vi sin guardar los cambios). El modo de ultima linea es habitualmente usado por ordenes vi mayores de un carácter.

En el modo de ultima linea, introduce una orden de una sola linea y pulsa [enter] para ejecutarla.

3.12.2 Comenzando con vi

La mejor forma de entender estos conceptos es arrancar vi y editar un fichero. En el ejemplo "screens" que veremos, vamos a mostrar solo unas pocas líneas de texto, como si la pantalla tuviese solo seis líneas de altura (en lugar de veinticuatro). La sintaxis de vi es vi donde es el nombre del fichero que desea editar. Arranque vi tecleando
/home/larry# vi test
lo que editará el fichero test. Debería ver algo como
  __________________________________________________________________
  |
  | ~
  | ~
  | ~
  | ~
  | ~
  |_"test"_[New_file]__________________________________________________
La columna de caracteres "~" indica que esta al final del fichero.

3.12.3 Insertando texto

Esta ahora en modoordenes; para poder insertar texto en el fichero, pulse [i] (lo que le hará entrar en modo inserción), y comience a escribir.
  __________________________________________________________________
  | Deckerix os saluda pequeñajos :-)
  | ~
  | ~
  | ~
  | ~
  | ~
  |__________________________________________________________________
Mientras inserta texto, puede escribir tantas líneas como desee (pulsando [return] después de cada una, por supuesto), y puede corregir los errores con la tecla de borrado de carácter. Para salir del modo de inserción y volver al modo de ordenes, pulse [esc]. Mientras este en modoordenes, puede usar las teclas del cursor para moverse por el fichero. En nuestro ejemplo, como solo tenemos una linea, el tratar de usar las teclas de linea arriba o abajo, probablemente hará que vi emita un pitido. Hay muchas formas de insertar texto a parte de la orden i. Por ejemplo, la orden a inserta texto comenzando detrás de la posición actual del cursor, en lugar de la posición actual del cursor.

Pulse [a] para iniciar el modo inserción, teclee cualquier cosa y pulse [esc] para volver al modo de ordenes. Para comenzar a insertar texto en la linea de debajo de la actual, use la orden "o". Solo recuerde que en cualquier momento está en modo de ordenes (donde ordenes como i, a ò o son validas, o en modo de inserción (cuando este insertando texto, pulse [esc] para volver al modo de ordenes), o en modo de ultima linea (donde puede introducir comandos extendidos, como veremos más adelante).

3.12.4 Borrando texto

Desde el modo de ordenes, la orden x borra el carácter debajo del cursor.
Puede borrar líneas enteras usando la orden dd (es decir, pulse [d] dos veces en una fila).
Para borrar la palabra sobre la que se encuentra el cursor, use la orden dw.

3.12.5 Modificando texto

Puede sustituir secciones de texto usando la orden R. Situe el cursor en la primera letra de "saluda" y pulse [R], y escriba la palabra "llama".
  __________________________________________________________________
  | Deckerix os saluda pequeñajos :-)
  | ~
  | ~
  | ~
  | ~
  | ~
  |__________________________________________________________________
El uso de R para editar texto es bastante parecido al uso de las ordenes i y a, pero R sobreescribe texto en lugar de insertarlo.

La orden r sustituye un único carácter situado debajo del cursor. Por ejemplo, sitúe el cursor sobre la 'o' de "pequeñajos" y escriba r seguido de a. Obtendrá:
  __________________________________________________________________
  | Deckerix os saluda pequeñajas :-)
  | ~
  | ~
  | ~
  | ~
  | ~
  |__________________________________________________________________
La orden "~" cambia de mayúsculas a minúsculas o viceversa la letra sobre la que se encuentra el cursor. Por ejemplo, si sitúa el cursor sobre la "D" de "dECKERIX", y repetidamente pulsa [~], obtendrá:
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | ~
  |__________________________________________________________________

3.12.6 Ordenes de movimiento

Ya conoce como usar las teclas del cursor para moverse por el documento. Además, puede usar las ordenes h, j, k y l para mover el cursor a la izquierda, abajo, arriba y derecha respectivamente. Esto es muy cómodo cuando (por alguna razón) sus teclas de cursor no funcionen correctamente.

· La orden w mueve el cursor al comienzo de la siguiente palabra;
. b lo lleva al comienzo de la palabra anterior.
· La orden 0 (cero) mueve el cursor al comienzo de la linea actual, y la orden $ lo lleva al final de la linea.

Al editar ficheros grandes, querrá moverse hacia adelante y atrás a lo largo del fichero mostrando una pantalla cada vez. Pulsando [ctrl-F] avanza el cursor una pantalla hacia adelante y [ctrl-B]lo lleva una pantalla atrás.

· Para llevar el cursor al final del fichero, pulse G. Puede también desplazarse a una linea arbitraria; por ejemplo, pulsando la orden 10G llevará el cursor a la línea 10 del fichero. Para desplazarse al comienzo, use 1G. Puede asociar ordenes de desplazamiento con otras ordenes como es el borrado. Por ejemplo, la orden d$ borrará todo desde la posición del cursor al final de la linea; dG borrará todo desde la posición del cursor al final del fichero.

3.12.7 Guardando ficheros y saliendo de vi

Para salir de vi sin modificar el fichero use la orden :q!. Al pulsar ":", el cursor se desplazará a la última línea de la pantalla; está en modo ultima linea.
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | :wq!
  |__________________________________________________________________
En el modo de ultima línea hay disponibles una serie de ordenes extendidas. Una de ellas es q!, la cual permite salir de vi sin guardar los cambios. La orden :wq salva el fichero y sale de vi(puede usar :wq! para forzar).

La orden ZZ (desde el modo de ordenes, sin ":") es equivalente a :wq. Recuerde que debe pulsar [enter] después de introducir la orden para que esta se ejecute en el modo ultima linea.

Para salvar el fichero sin salir de vi, simplemente use :w.

3.12.8 Editando otro fichero

Para editar otro fichero use la orden :e. Por ejemplo, para dejar de editar el fichero test y en su lugar editar el fichero foo, use la orden
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | :e foo
  |__________________________________________________________________
Si usa :e sin salvar primero el fichero, obtendrá el mensaje de error
  ______________________________________________________________
  |
  |No_write_since_last_change_(":edit!"___overrides)
  |______________________________________________________________
lo cual significa que vi no quiere editar otro fichero hasta que salve el primero. En este punto, puede usar :w para guardar el fichero original, y entonces usar :e, o puede usar la orden
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | :e! foo
  |__________________________________________________________________
El signo "!" le dice a vi lo que realmente desea usted editar el nuevo fichero sin salvar los cambios del primero.

3.12.9 Incluyendo otros ficheros

Si usas la orden :r Puede incluir el contenido de otro fichero en el fichero que esta editando. Por ejemplo
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | :r foo.txt
  |__________________________________________________________________
insertaría el contenido del fichero foo.txt en el texto en la posición actual de cursor.

3.12.10 Ejecutando comandos del interprete

Puede también ejecutar comandos del interprete desde el interior de vi. La orden :r! funciona como :r, pero en lugar de leer un fichero, inserta la salida de un comando dado en el fichero en la posición actual del cursor. Por ejemplo, si usa la orden
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | ~
  | ~
  | ~
  | ~
  | :r! ls -F
  |__________________________________________________________________
obtendrá
  __________________________________________________________________
  | DECKERIX OS SALUDA PEQUEÑAJAS :-)
  | cartas/
  | documentos/
  | tesis/
  | ~
  |
  |__________________________________________________________________
También puede salir a un interprete de comandos desde vi, es decir, ejecutar una orden desde dentro de vi y volver al editor una vez esta finalice. Por ejemplo, si usa la orden
:! ls -F
la orden ls -F será ejecutada, y los resultados mostrados en la pantalla, pero no insertados en el fichero en edición. Si usa la orden
:shell
vi iniciará una instancia del interprete de comandos, permitiéndole temporalmente dejar a vi "parado" mientras ejecuta otras ordenes. Simplemente salga del interprete de comandos (usando la orden exit) para regresar a vi.

3.12.11 Obteniendo ayuda

vi no proporciona demasiada ayuda de forma interactiva (la mayoría de los programas UNIX no lo hacen), pero siempre puede leer la pagina de manual para vi. vi es un "front-end" visual para el editor ex: es decir, es ex quien maneja la mayoría de las ordenes en el modo ultima linea. Luego además de leer la pagina de vi, consulte la de ex también.