Applications
original in en Ben Y. Yoshino
en to es Javier Fdez. Retenaga
Ben Yoshinori Yoshino trabaja en la universidad de Hawai. Su página personal se encuentra en la siguiente dirección: www.eng.hawaii.edu/~ben
Este es un tutorial de vi escrito por Ben Y. Yoshino. El original se encuentra en www.eng.hawaii.edu/Tutor/vi.html. Se pueden examinar otros tutoriales del mismo autor en: www.eng.hawaii.edu/Tutor/. Vimos este artículo en www.rootprompt.org y lo publicamos aquí con permiso del autor.
El editor VI es un editor que opera en modo consola, utilizado por muchos usuarios de Unix. El editor VI posee características muy útiles para los programadores, pero muchos principiantes evitan emplearlo porque se ven abrumados por sus variadas funciones. Este tutorial ha sido escrito con el propósito de ayudar a los principiantes a familiarizarse con el uso del editor VI, pero también contiene apartados de interés para quienes ya lo utilizan habitualmente. Se ofrecerán algunos ejemplos: la mejor forma de aprender es ponerlos en práctica uno mismo, y también idear nuevos ejemplos... No hay mejor modo de aprender que experimentar las cosas por uno mismo.
En este tutorial adoptamos la siguiente convención en cuanto al uso de signos:
^X indica CTRL + X. Por ejemplo, si en el tutorial aparece ^d, eso significa que se ha de pulsar la tecla control y, sin soltarla, a continuación la letra correspondiente. En este ejemplo habría que pulsar la tecla control, y seguidamente teclear d.
Este apartado no es relevante para aquellos usuarios de Linux que dispongan de emuladores de terminales modernos tales como xterm, gnome-terminal, kvt o aterm. Con esas ventanas de terminal, la variable del shell $TERM tendrá siempre por defecto el valor correcto, de modo que no tendrá que preocuparse de ello.
N. del T.: wiliki es el nombre del servidor principal del departamento de ingeniería de la universidad de Hawai. Como se ve, este tutorial iba en principio dirigido a los estudiantes y profesores de esa universidad. |
El editor VI utiliza toda la pantalla, por lo que necesita saber qué clase de terminal va a utilizarse. Cuando introduzca su nombre de usuario, wiliki debería preguntarle qué tipo de terminal tiene usted. En la pantalla debe aparecer lo siguiente:
TERM = (vt100)
Si sabe que su terminal es del tipo vt100 (o un emulador de la misma), al ser preguntado por el tipo de terminal, simplemente pulse Enter. Si tiene una terminal HP, teclee "hp" y pulse Enter. Si no sabe a ciencia cierta qué tipo de terminal tiene, pregunte a alguien que trabaje en el laboratorio o pida a alguien que le ayude a determinar el tipo de terminal correcto.
Si al entrar comete un error e indica un tipo de terminal incorrecto, no se alarme y salga del sistema. Para solucionarlo puede hacer lo siguiente:
En primer lugar, indíquele a su shell qué tipo de terminal tiene. (Si no sabe bien qué shell tiene, teclee la
siguiente orden: echo $SHELL). En los ejemplos propuestos el tipo de terminal utilizada es "vt100".
Sustitúyalo por la que usted tenga. Para el shell C (/bin/csh), la orden es ésta:
set term=vt100
Para el Bourne Shell (/bin/sh) o el Korn Shell (/bin/ksh), las órdenes son las siguientes:
TERM=vt100 export TERM
A continuación, reinicie su terminal mediante esta orden:
tset
Ahora que (esperamos) ya hemos seleccionado el tipo de terminal correcto, estamos preparados para comenzar a utilizar el VI.
El editor VI permite al usuario crear nuevos archivos o editar los ya existentes. La orden para iniciar el editor VI editor es vi, seguida del nombre del archivo. Por ejemplo, para editar un archivo denominado temporal, deberíamos teclear vi temporal y pulsar Enter. Puede también iniciar el VI sin indicar ningún nombre de archivo, pero en ese caso, cuando quiera guardar su trabajo tendrá qué indicarle al VI el nombre de archivo en que desea guardarlo.
Cuando inicie VI por vez primera, se encontrará con una pantalla cuyo margen izquierdo aparecerá lleno
de virgulillas como la que en castellano va sobre la letra eñe (~). Así es como se representan las líneas
vacías tras el fin del archivo. En la base de la pantalla se mostrará el nombre del archivo -en el caso en
que se haya especificado uno- y su tamaño, del siguiente modo:
"filename" 21 lines, 385 characters
Si el archivo especificado no existe, VI le indicará que se trata de una archivo nuevo, del siguiente modo:
"newfile" [New file]
Si inició VI sin indicar un nombre de archivo, la línea al fondo de la pantalla aparecerá vacía. Si la pantalla no le muestra los resultados esperados, que acabamos de mencionar, es posible que la terminal no esté configurada correctamente. En ese caso, pulse q y Enter, para salir de VI, y corrija el tipo de terminal. Si no sabe cómo hacerlo pregunte a alguien que trabaje en el laboratorio.
Ahora que sabe cómo entrar en VI, no estaría de más conocer el modo de salir. El editor VI tiene dos modos y, para salir de VI, tiene que estar en el modo comando. Para entrar en modo comando pulse la tecla Esc (Si su terminal carece de esa tecla, haga la prueba pulsando ^[. Si estaba ya en modo comando cuando pulsó Escape, no se preocupe. Podría emitir un "bip", pero seguiría encontrándose en el modo comando.
La orden para salir de VI es :q ; es decir, que una vez se encuentre en modo comando, ha de teclear dos puntos, seguido de 'q', y continuación pulsar Enter. Si el archivo ha sufrido alguna modificación, el editor le avisará de esa circunstancia y no le permitirá cerrarlo. Si quiere eludir ese mensaje, la orden para salir de VI sin guardar los cambios es :q!.
Naturalmente, lo habitual en un editor es que usted desee guardar los cambios que ha hecho. La orden para hacerlo es :w. También puede combinar esta orden con la de salir, del siguiente modo :wq. Y si lo desea puede guardar los cambios en un archivo diferente, especificando el nombre de éste tras :w. Por ejemplo, si quiere guardar el archivo en el que está trabajando con otro nombre, digamos archivo2, entonces tendría que escribir : w archivo2 y Enter.
Otro modo de guardar los cambios y salir de VI es la orden ZZ. Cuando se encuentre en el modo comando, escriba ZZ; obtendrá el mismo resultado que con :wq. De ese modo se guardaría cualquier cambio que se hubiera operado en el archivo. Esta es la forma más sencilla para salir del editor: con sólo dos pulsaciones.
Lo primero que la mayor parte de los usuarios aprenden del editor VI es que cuenta con dos modos: comando e insertar. El modo comando permite introducir órdenes para manipular el texto. Normalmente estas órdenes no tienen más que uno o dos caracteres, pudiendo así introducirse con pocas pulsaciones. El modo insertar hace que todo lo que se pulse en el teclado se incorpore al archivo.
VI se inicia en el modo comando. Hay varias formas de pasar al modo insertar. La más común consiste en teclear a o i. Más abajo se describen ambas órdenes. Una vez se encuentre en el modo insertar, podrá salir de él pulsando la tecla escape (si su terminal no tiene esa tecla, debería funcionar ^[ ). Puede pulsar escape dos veces seguidas y de esa manera no habrá duda de que se encuentra en modo comando. Pulsar escape mientras se encuentra en modo comando no hace que el editor salga de dicho modo; sonará un pitido para confirmarle que se encuentra ya en ese modo.
En el modo comando las órdenes siguen normalmente el siguiente esquema (entre corchetes aparecen las variables optativas):[cifra] comando [dónde]
La mayor parte de las instrucciones constan de un solo carácter, incluidas aquellas en las que es preciso pulsar la tecla Ctrl. En el siguiente apartado describiremos las instrucciones que más suelen emplearse en el editor VI.
La cifra es cualquier número que comience por un carácter entre 1 y 9. Por ejemplo, la instrucción x borra el carácter que se encuentra en el lugar del cursor. Si, dentro del modo comando, se teclea 23x, se borrarán 23 caracteres.
Algunas órdenes utilizan un parámetro optativo -dónde-, en el que puede especificarse cuántas líneas o a qué parte del documento afecta la orden. El parámetro dónde puede ser también cualquier orden que mueva el cursor.
He aquí una sencilla colección de órdenes para comenzar a utilizar el VI. Hay muchos otras, muy útiles, de las que nos ocuparemos más adelante.
El editor VI cuenta con 36 búferes para almacenar fragmentos de texto, y también un búfer de uso general. Siempre que un fragmento de texto es borrado o extraído (copiado) del archivo, queda colocado en el búfer de uso general. La mayoría de los usuarios de VI apenas hacen uso de los otros búferes, y pueden arreglárselas sin ellos. El fragmento de texto se almacenará también en otro búfer si se especifica uno. El búfer se especifica mediante la orden ". Tras pulsar ", hay que introducir una letra o dígito para especificar el búfer. Por ejemplo, la orden: "mdd utiliza el búfer m, y los dos últimos caracteres significan que se va a borrar la línea entera. Del mismo modo, es posible pegar texto mediante la instrucción p o P. "mp pega el contenido del búfer m tras el lugar en el que se encuentra el cursor. En el caso de cualquiera de las instrucciones mencionadas en los dos apartados siguientes, estos búferes pueden utilizarse para almacenar temporalmente palabras o párrafos.
La orden que habitualmente se usa para cortar es d. Esta instrucción borra texto del archivo. La orden puede ir precedida de una cifra y seguida de la indicación de un movimiento. Si duplica la orden pulsando dd, se borrará la línea entera. He aquí algunas combinaciones de este tipo:
Existe también la orden y (copiar) que opera de forma parecida a la orden d, sólo que sin borrar el texto del archivo.
Las órdenes para pegar son p y P. La única diferencia entre ellas es el lugar en que pegan respecto del cursor. p pega el contenido del búfer general o específico tras la posición del cursor, mientras que P lo pega delante del cursor. Si se especifica una cifra antes de la orden pegar, el texto se pegará el número de veces que se haya indicado.
El editor VI posee una serie de funciones que ayudan al programador a dar a sus códigos una forma pulcra. Existe una variable para determinar la tabulación que se da a los distintos niveles del código. Para disponerlo a su gusto, consulte el apartado de personalización de este tutorial. Por ejemplo, la orden para hacer que la tabulación tenga una anchura de cuatro espacios es :set sw=4.
Las siguientes órdenes sirven para marcar las tabulaciones de una línea o para quitarlas, y pueden modificarse con cifra:
El editor VI dispone también de una función muy útil para verificar que en su código fuente no han quedado paréntesis o corchetes sin cerrar. La orden % buscará el paréntesis o corchete izquierdo correspondiente a un determinado signo de paréntesis o corchete derecho, y viceversa. Coloque el cursor encima de un paréntesis o corchete y pulse % para llevar el cursor al paréntesis o corchete que le corresponde. Si hay un paréntesis o corchete desparejado, VI emitirá un pitido para indicarle que no se ha encontrado el símbolo correspondiente.
El editor VI permite dos tipos de búsquedas: secuencia de caracteres o carácter. En el caso de las secuencias de caracteres se utilizan las órdenes / y ?. Cuando se emplean estas órdenes, la orden que se acaba de activar se mostrará en la última línea de la pantalla, donde se mostrará también la secuencia que se va a buscar. La única diferencia entre ambas instrucciones es la dirección de la búsqueda. La orden / busca hacia delante (hacia abajo) en el archivo, mientras que la orden ? busca hacia atrás (hacia arriba). Las órdenes n y N sirven para repetir la búsqueda anterior en la misma o en la dirección opuesta, respectivamente. Algunos caracteres tienen para VI un significado particular, por lo que para ser incluidos como parte de la búsqueda han de ir precedidos de una barra invertida (\).
Caracteres especiales:
El segundo tipo de búsqueda busca el carácter introducido tras la orden correspondiente. Las órdenes f y F buscan un carácter únicamente en la línea en la que se encuentra el cursor. f busca hacia adelante y F hacia atrás, desplazándose el cursor a la posición del carácter encontrado.
Las órdenes t y T buscan también un carácter únicamente en la línea en la que se encuentra el cursor, pero en el caso de t el cursor se desplaza a la posición anterior al carácter hallado, y T busca en la línea hacia atrás, desplazándose el cursor hasta la posición inmediatamente posterior al carácter.
Ambas parejas de órdenes pueden repetirse mediante las órdenes ; o ,. La orden ; repite la búsqueda del carácter en la misma dirección, mientras que , la repite en la dirección opuesta.
Con la opción "ic" (ignorecase) activada (teclee :set ic) puede hacer que la búsqueda no discrimine mayúsculas y minúsculas.
Usted puede personalizar el VI antes de comenzar. Hay varias opciones de edición, disponibles utilizando la orden :set. Las opciones de los editores VI y EX disponibles en Wiliki son las siguientes (puede obtener una lista completa tecleando :set all y Enter, dentro del modo comando):
noautoindent magic noshowmatch autoprint mesg noshowmode noautowrite nomodelines noslowopen nobeautify nonumber tabstop=8 directory=/tmp nonovice taglength=0 nodoubleescape nooptimize tags=tags /usr/lib/tags noedcompatible paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm noerrorbells prompt noterse noexrc noreadonly timeout flash redraw timeoutlen=500 hardtabs=8 remap ttytype=xterm noignorecase report=5 warn keyboardedit scroll=11 window=23 keyboardedit! sections=NHSHH HUuhsh+c wrapscan nolisp shell=/bin/csh wrapmargin=0 nolist shiftwidth=8 nowriteany
A algunas de estas opciones se les pueden asignar valores con el signo '=', mientras que otras simplemente están activadas o desactivadas. (Estas opciones de tipo on - off se denominan booleanas, y, para indicar que no están activadas, llevan un "no" delante.) Las opciones mostradas aquí son las que se tienen por defecto, sin personalizar. A continuación describimos algunas de ellas, añadiendo sus abreviaturas. Por ejemplo, en el caso de la orden set autoindent, puede teclear :set autoindent, o bien :set ai. Y para desactivarla :set noautoindent o :set noai.
Una orden del editor EX de utilidad en VI es la orden ab (abreviatura). Esto le permite asignar abreviaturas a
determinadas secuencias de caracteres. La orden tiene la siguiente forma :ab <abreviatura>
<secuencia_que_debe_sustituirla>. Por ejemplo, si tuviera que escribir la palabra
"Humuhumunukunukuapua`a", pero no quisiera tener siempre que teclearla entera, podría usar una
abreviatura. En este caso, podría introducir una orden como la siguiente:
:ab 9u Humuhumunukunukuapua`a
Así, siempre que pulse 9u separadamente, VI escribirá la palabra completa. Eso no sucederá si usted
teclea 9universidad, por ejemplo.
Para borrar una abreviatura previamente definida, utilizará la orden 'unabbreviate' (desabreviar). En el caso del ejemplo anterior, la orden sería ":una 9u". Para obtener un listado de las abreviaturas que ha definido, teclee simplemente :ab, sin nada detrás.
Otra orden del editor EX que es útil para personalizar el VI es la que sirve para cambiar la función de las teclas. La hay de dos tipos: una para el modo comando y otra para el modo insertar. Estas dos órdenes son :map y :map!, respectivamente. Su funcionamiento es similar al de las abreviaturas: se pulsa una secuencia de teclas, y continuación otra secuencia de teclas que debe sustituir a la anterior. (Por lo general, las secuencias de teclas sustituidas son órdenes de VI.)
Existen dos formas de personalizar el editor VI. Si crea un archivo de nombre .exrc en su directorio
personal, todas las órdenes ahí especificadas serán leídas al arrancar el editor VI. El otro método consiste
en crear una variable de entorno denominada EXINIT. Las opciones se grabarán el archivo de
configuración de su shell. Si utiliza el shell C (/bin/csh), la orden, que se grabará en el archivo .cshrc es la
siguiente:
setenv EXINIT '...'
Si utiliza /bin/sh o /bin/ksh, la orden. que se grabará en el archivo the .profile, será la siguiente:
export EXINIT EXINIT='...'
No ponga ... como en el ejemplo. En ese lugar deberá poner las órdenes que desea activar. Por ejemplo, si
quiere tabulación automática, numeración de líneas y un margen derecho de tres caracteres, en tal caso la
orden setenv deberá aparecer (para el shell C) como sigue:
setenv EXINIT 'set ai nu wm=3'
Si quiere poner más de una orden en el setenv EXINIT, sepárelas por medio de una barra vertical (|). Por ejemplo, para hacer que el carácter 'G' haga las veces de la orden '/g' en el modo comando, tendrá que escribir :map g G, lo que combinado con la instrucción anterior sería:
setenv EXINIT 'set ai nu wm=3|map g G'
Si desea crear el archivo .exrc, puede escribir ahí exactamente lo mismo que se ha mostrado entre comillas, tras el EXINIT.
El editor VI edita una copia temporal de su archivo, y, una vez que la edición ha finalizado o cuando usted le da la orden de guardar, el contenido de la copia temporal se graba en el archivo original. Si algo va mal durante la edición del archivo, el editor VI tratará de guardar el trabajo que usted estaba haciendo y lo almacenará para su posterior recuperación. (Nota: Si VI se cierra súbitamente mientras usted estaba trabajando con un archivo, le enviará un mensaje indicándole cómo recuperarlo. Para su recuperación se utiliza la opción -r. Si estaba usted editando el archivo vitalinfo y ha salido del sistema accidentalmente, la opción -r del editor 'vi' puede serle de ayuda. Esta orden tiene la forma siguiente: vi -r vitalinfo No obstante, una vez se ha hecho uso de la opción -r, DEBE guardar inmediatamente el trabajo, pues dicha opción sólo funciona una vez por cada sesión fallida de VI.)
Hay dos cosas a tener en cuenta cuando se utiliza una estación de trabajo: la edición de un mismo archivo varias veces y el cambio de tamaño de la pantalla.
Dado que VI edita una copia de su archivo original y guarda los contenidos de esa copia sobre el archivo original, si arranca el editor más de una vez y está editando el mismo archivo varias veces, si guardara el trabajo en una ventana y luego lo volviera a guardar en otra, los cambios operados en la primera ventana desaparecerían, sobrescritos por los de la segunda ventana. Así pues, asegúrese de abrir una sola copia de VI por archivo.
Si utiliza un programa de terminal dentro de una estación de trabajo, puede cambiar el tamaño de la
pantalla corriendo los lados de la ventana. Si tiene problemas con el tamaño de la ventana, la orden a
teclear es la siguiente:
eval `resize`
Si esto no funciona la orden podría ser ésta:
eval `/usr/bin/X11R6/resize`
Éste es un problema que raras veces se producirá en versiones modernas de VI, tales como, por ejemplo, Vim.
La siguiente lista es un resumen de órdenes de VI, clasificadas según su función. Existen muchas otras: puede echar un vistazo al manual en línea de VI. Para disponer de un esquema sencillo, puede guardar este archivo en formato de texto, borrar las órdenes que crea que no va a utilizar e imprimir el archivo resultante.
El editor VI está construido sobre otro editor, denominado EX. El editor EX sólo edita por líneas. Para introducir una orden de EX desde el editor VI, deberá utilizar la orden :. La lista que ofrecemos a continuación no es completa, pero aparecen ahí las órdenes que habitualmente más se emplean. Si se quiere que una orden -como ":s" o ":w" modifique más de una línea, hay que especificar el intervalo al que afectará dicha orden. Por ejemplo, para hacer alguna sustitución entre las líneas 3 y 15, la orden sería ":3,15s/esto/estotro/g".
Última actualización: 10 de diciembre de 1996
Actualizado el 27 de julio de 1995
Actualizado el 3 de octubre de 1994
Copyright © 1996 University of Hawaii, College of Engineering, Computer Facility
All rights reserved.