Aprendiendo a utilizar el editor VI

ArticleCategory: [Kies een categorie voor je artikel]

Applications

AuthorImage:[Hier komt een kleine foto van jou]

[Foto of the Auteur]

TranslationInfo:[Info over schrijver(s) en vertaler(s)]

original in en Ben Y. Yoshino

en to es Javier Fdez. Retenaga

AboutTheAuthor:[een korte biografie over de auteur]

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

Abstract:[een kleine samenvatting/beschrijving van het artikel]

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.

ArticleIllustration:[Titel-illustratie van het Artikel]

[VIM the edtitor]

ArticleBody:[Het eigenlijke artikel: zet hier teks en HTML codes]

Signos utilizados

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.

Antes de empezar

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.

Iniciando el editor 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.

Cómo salir de VI

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.

Los dos modos de VI

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.

Cómo utilizar las funciones del modo comando

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.

Algunas órdenes sencillas en VI

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.

a
nos coloca en el modo insertar. Los caracteres pulsados se irán insertando tras el cursor. Si se especifica una cifra, el texto que haya sido insertado se repetirá ese número de veces.
h
mueve el cursor una posición hacia la izquierda.
i
nos coloca en el modo insertar. Los caracteres pulsados se irán insertando tras el cursor. Si se especifica una cifra, el texto que haya sido insertado se repetirá ese número de veces.
j
mueve el cursor una línea hacia abajo.
k
mueve el cursor una línea hacia arriba.
l
mueve el cursor una posición hacia la derecha.
r
sustituye el carácter sobre el que se encuentra el cursor. Especifique la cifra para sustituir un número determinado de caracteres.
u
deshace el último cambio operado en el archivo. Si pulsa u de nuevo, se rehará el cambio.
x
Borra el carácter que se halla bajo el cursor. Cifra especifica cuántos caracteres han de borrarse. Se borrarán los caracteres que se encuentran tras el cursor.

Búferes de texto en VI

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.

Cortar y extraer

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:

d^
borra desde la posición del cursor hasta el comienzo de la línea.
d$
borra desde la posición del cursor hasta el fin de la línea.
dw
borra desde la posición del cursor hasta el fin de la palabra.
3dd
borra tres líneas desde la posición del cursor hacia abajo.

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.

Pegar

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.

Cómo dar forma y verificar su código

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:

<<
Corre la línea una tabulación hacia la izquierda.
>>
Corre la línea una tabulación hacia la derecha.

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.

Cómo buscar palabras o caracteres

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:

^
Comienzo de la línea. (Al comienzo de una secuencia de búsqueda.)
.
Una aparición de cualquier caracter.
*
Varias (o ninguna) repeticiones del caracter detrás del que va situado.
$
Fin de la línea. (Al final de una secuencia de búsqueda.)
[
Indica el comienzo de un conjunto de elementos a incluir o excluir de la búsqueda. Por ejemplo: /f[iae]t buscará cualquiera de estas secuencias: 'fit', 'fat', 'fet'. En la forma que sigue lo que hará es excluir lo que aparece entre corchetes: /a[^bcd]. En este caso, buscará toda 'a' que no vaya seguida de 'b', 'c' o 'd'.
<
>
Estos signos, combinados con la barra invertida, sirven para buscar el comienzo o el final de una palabra. Por ejemplo: /\<en\> buscaría únicamente la palabra 'en'; no buscaría 'entre' ni 'dentro'.

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.

Opciones en VI (y EX)

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.

autoindent (ai)
Esta opción hace que las líneas siguientes a una dada tengan su misma tabulación. Si quiere volver a la tabulación anterior, no tiene más que pulsar ^D en la posición del primer carácter. La orden ^D funciona sólo en el modo insertar, no en modo comando. También es posible determinar la anchura de las tabulaciones mediante la opción shiftwidth, descrita más abajo.
exrc
El archivo .exrc del directorio actual es leído al comenzar una sesión. Éste debe encontrarse en la variable de entorno EXINIT o en el archivo .exrc, en su directorio personal.
mesg
Desactive esta opción mediante :set nomesg, si no quiere que aparezca ningún mensaje en pantalla.
number (nu)
Muestra el número de línea en el margen izquierdo.
shiftwidth (sw)
Esta opción requiere que se le asigne un valor, y determina la anchura de las tabulaciones (órdenes << y >>). Por ejemplo, para que la tabulación sea de cuatro espacios escribirá lo siguiente :set sw=4.
showmode (smd)
Esta opción sirve para mostrar el modo actual del editor. Si se encuentra en el modo insertar, en la última línea de la pantallas aparecerá INPUT MODE.
warn
Esta opción le avisa si ha modificado el archivo pero todavía no lo ha guardado.
window (wi)
Esta opción determina el número de líneas que VI usará en pantalla. Por ejemplo, para hacer que VI utilice únicamente 12 líneas de su pantalla (si su modem es lento), indicaría lo siguiente: :set wi=12.
wrapscan (ws)
Esta opción afecta al comportamiento de la búsqueda de palabras. Cuando wrapscan está activado, si no se encuentra la palabra al llegar al final del archivo, tratará de buscarla desde el comienzo.
wrapmargin (wm)
Si esta opción tiene un valor mayor que cero, se activará el retorno manual. Es decir, si alcanza el número de espacios indicados a partir del extremo derecho de la pantalla, la palabra pasará a la línea siguiente sin necesidad de pulsar Enter. Por ejemplo, para mantener un margen derecho de dos espacios, tendría que dar la orden: :set wm=2.

Abreviaturas y cambio de función de las teclas

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.)

La variable de entorno EXINIT y el archivo .exrc

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.

Cómo recuperar su trabajo cuando algo no va bien en la terminal

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.)

Advertencia acerca del uso de VI en estaciones de trabajo

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.

Sumario de órdenes de VI

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.

Cortar y pegar/Borrar texto

"
Especifica un búfer para ser utilizado por cualquiera de las órdenes que se sirven de ellos. Añada una letra o número tras el signo " para signarle un búfer.
D
Borra desde la posición actual del cursor hasta el final de la línea.
P
Pega el búfer especificado delante de la línea o posición actual del cursor. Si no se especifica ningún búfer (con la orden " ), entonces 'P' hace uso del búfer general.
X
Borra el carácter anterior al cursor.
Y
Graba la línea actual en el búfer especificado. Si no se especifica ninguno la grabará en el búfer general.
d
Borra hasta dónde. "dd" borra la línea actual. Una cifra indica el número de líneas a borrar. Cualquier cosa borrada se grabará en el búfer especificado con la orden ". Si no se especifica ningún búfer, utilizará el búfer general.
p
Pega el contenido del búfer especificado tras la línea o posición actual del cursor. Si no se especifica ningún búfer (con la orden " ), entonces 'p' hace uso del búfer general.
x
Borra el carácter sobre el que se halla el cursor. Una cifra indicará cuántos caracteres han de borrarse. Los caracteres se borrarán tras el cursor.
y
Graba hasta , colocándolo en un búfer. "yy" graba la línea actual. Una cifra indicará cuántas líneas han de grabarse. El búfer puede especificarse con la orden ". Si no se especifica ninguno, se utilizará el búfer general.

Insertar nuevo texto

A
Añade el texto al final de la línea actual.
I
Inserta el texto desde el comienzo de la línea.
O
Introduce el modo insertar en una nueva línea encima de la posición actual del cursor.
a
Cambia al modo insertar. Los caracteres escritos se insertarán tras la posición actual del cursor. Una cifra insertará el texto añadido la cantidad de veces indicada.
i
Cambia al modo insertar. Los caracteres escritos se insertarán delante de la posición actual del cursor. Una cifra insertará el texto añadido la cantidad de veces indicada.
o
Introduce el modo insertar en una nueva línea bajo la posición actual del cursor.

Desplazar el cursor dentro de un archivo

^B
Nos lleva una página atrás. Con una cifra, nos desplazará el número de páginas indicado.
^D
Nos lleva media ventana hacia delante. Con una cifra, nos desplazará el número de líneas indicado.
^F
Nos lleva una página hacia delante. Con una cifra, nos desplazará el número de páginas indicado.
^H
Mueve el cursor un espacio hacia la izquierda. Con una cifra, nos desplazará el número de espacios indicado.
^J
Mueve el cursor una línea hacia abajo en la misma columna. Con una cifra, lo hará descender el número de líneas indicado.
^M
Lleva el cursor al primer carácter de la línea siguiente.
^N
Mueve el cursor una línea hacia abajo en la misma columna. Con una cifra, lo hará descender el número de líneas indicado.
^P
Mueve el cursor una línea hacia arriba en la misma columna. Con una cifra, lo hará subir el número de líneas indicado.
^U
Nos lleva media ventana hacia atrás. Con una cifra, nos desplazará el número de líneas indicado.
$
Desplaza el cursor hasta el final de la línea actual. Con una cifra, nos llevará cuantas líneas adelante indiquemos.
%
Desplaza el cursor hasta el paréntesis o comillas correspondientes.
^
Lleva el cursor hasta el primer lugar que no está en blanco.
(
Lleva el cursor al comienzo de una frase.
)
Lleva el cursor al comienzo de la frase siguiente.
{
Lleva el cursor al párrafo anterior.
}
Lleva el cursor al siguiente párrafo.
|
Lleva el cursor a la columna especificada por la cifra.
+
Lleva el cursor hasta el primer lugar de la línea siguiente que no está en blanco.
-
Lleva el cursor hasta el primer lugar de la línea anterior que no está en blanco.
_
Lleva el cursor hasta el primer lugar de la línea actual que no está en blanco.
0
(Cero) Lleva el cursor a la primera columna de la línea actual.
B
Lleva el cursor una palabra hacia atrás, incluyendo los signos de puntuación.
E
Lleva el cursor al final de la palabra actual, incluyendo los signos de puntuación.
G
Nos lleva al número de línea especificado en la cifra. Si no se indica una cifra, nos llevará al final del archivo.
H
Lleva el cursor hasta el primer lugar de la parte superior de la pantalla que no está en blanco.
L
Lleva el cursor hasta el primer lugar de la parte inferior de la pantalla que no está en blanco.
M
Lleva el cursor hasta el primer lugar del centro de la pantalla que no está en blanco.
W
Lleva el cursor hacia delante hasta el comienzo de una palabra, incluyendo los signos de puntuación.
b
Lleva el cursor una palabra hacia atrás. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el primer carácter de esa palabra.
e
Lleva el cursor una palabra hacia delante. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el último carácter de esa palabra.
h
Mueve el cursor una posición hacia la izquierda.
j
Lleva el cursor una línea hacia abajo.
k
Lleva el cursor una línea hacia arriba.
l
Mueve el cursor una posición hacia la derecha.
w
Lleva el cursor una palabra hacia delante. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el primer carácãer de la siguiente palabra.

Desplazar el cursor por la pantalla

^E
Nos lleva una línea hacia delante. Con una cifra, nos desplazará el número de líneas indicado.
^Y
Nos lleva una línea hacia atrás. Con una cifra, nos desplazará el número de líneas indicado.
z
Rehace la pantalla con las opciones que se especifiquen a continuación. "z<enter>" coloca la línea actual en el extremo superior de la pantalla; "z." coloca la línea actual en el centro de la pantalla; y "z-" coloca la línea actual en el extremo inferior de la pantalla. Si especifica una cifra antes de la orden 'z', trasladará la línea especificada al lugar señalado. Por ejemplo, "16z." coloca la línea 16 en el centro de la pantalla.

Reemplazar texto

C
Para cambiar lo que hay a partir de la posición actual del cursor hasta el fin de la línea.
R
Sustituye los caracteres en pantalla por los que continuación se introduzcan; para finalizar hay que pulsar la tecla Esc.
S
Para cambiar una línea entera.
c
Para cambiar hasta . "cc" cambia la línea actual. Si se especifica una cifra, cambiará el número de líneas especificado.
r
Para sustituir el carácter sobre el que se encuentra el cursor. Especifique una cifra para sustituir un determinado número de caracteres.
s
Para sustituir el carácter sobre el que se encuentra el cursor y pasar a modo insertar. Especifique una cifra para sustituir un determinado número de caracteres. Un signo de dollar ($) aparecerá en el último carácter a sustituir.

Buscar texto o caracteres

,
Repite las últimas órdenes f, F, t or T en la dirección opuesta.
/
Busca hacia abajo, en el archivo, la secuencia especificada tras /.
;
Repite las últimas órdenes f, F, t or T.
?
Busca hacia arriba, en el archivo, la secuencia especificada tras ?.
F
Busca en la línea actual, hacia atrás, la secuencia especificada tras la orden 'F'. Si la encuentra, el cursor se desplaza hasta ella.
N
Repite la última búsqueda realizada mediante '/' o '?', en la dirección opuesta.
T
Busca en la línea actual, hacia atrás, el carácter especificado tras la orden 'T'. Si lo encuentra, el cursor se desplaza a la columna posterior a él.
f
Busca en la línea actual el carácter especificado tras la orden 'f'. Si lo encuentra, el cursor se desplaza hasta él.
n
Repite la última búsqueda realizada mediante '/' o '?'.
t
Busca en la línea actual el carácter especificado tras la orden 't'. Si lo encuentra, el cursor se desplaza hasta la columna que lo precede.

Manipulación de caracteres/Formateo de líneas

~
Cambia el carácter que se encuentra bajo el cursor de mayúscula a minúscula o viceversa.
<
Desplaza el número de líneas especificado una tabulación hacia la izquierda. "<<" desplaza la línea actual hasta la izquierda, pudiendo especificarse también una cifra.
>
Desplaza el número de líneas especificado una tabulación hacia la derecha. ">>" desplaza la línea actual hasta la derecha, pudiendo especificarse también una cifra.
J
Junta la línea actual con la siguiente. Puede especificarse una cifra para juntar un determinado número de líneas.

Guardar y salir

^\
Salir del modo "VI" y entrar en modo "EX". El editor EX es un editor de líneas sobre el que se ha construido el editor VI. La orden de EX para regresar a VI es ":vi".
Q
Salir del modo "VI" y entrar en modo "EX". El editor EX es un editor línea-a-línea. La orden de EX para regresar a VI es ":vi".
ZZ
Salir del editor guardando los cambios que se hubieran hecho.

Miscelánea

^G
Muestra el nombre del archivo actual y su estado.
^L
Para limpiar y rehacer la pantalla.
^R
Para rehacer la pantalla eliminando las líneas erróneas.
^[
Igual que la tecla Esc. Cancela las órdenes parcialmente escritas.
^^
Regresar al último archivo editado.
!
Ejecutar un shell. Si se especifica una cifra el programa que se ejecuta utilizando !, tomará la(s) linea(s) especificadas como entrada (input) y reemplazará dichas líneas con el resultado obtenido (output) del programa ejecutado. "!!" ejecuta un programa utilizando como entrada la línea actual. Por ejemplo, "!4jsort" tomará la línea en que se encuentra el cursor más las cuatro siguientes y ejecutará sort. Tras activar la orden aparecerá un signo de exclamación donde usted podrá escribir las instrucción completa.
&
Repite la orden previa ":s".
.
Repite la última orden que modificó el archivo.
:
Para comenzar a escribir una orden del editor EX. La orden se ejecutará una vez que el usuario pulse Enter. (Véase el siguiente apartado.)
@
Imprime el comando almacenado en el búfer especificado.
U
Devuelve la línea actual al estado en que se encontraba antes de que el cursor se colocara en ella.
m
Marca la posición actual con el carácter especificado tras la orden 'm'.
u
Deshace el último cambio operado en el archivo. Pulsando 'u' de nuevo rehará el cambio.

Órdenes de EX

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".

:ab secuencia1 secuencia2
Abreviatura. De este modo, si en VI se escribe la secuencia 1, ewl editor insertará automáticamente las palabras correspondientes (secuencia2). Por ejemplo, la orden ":ab lup Licencia de Uso Público" haría que siempre que se escribiese "lup" se insertara la expresión "Licencia de Uso Público".
:map teclas nueva_secuencia_de_teclas
Esto le permite que una tecla o secuencia de teclas desempeñe la misma función que determinada tecla o secuencia de teclas.
:q
Salir de VI. Si se ha hecho algún cambio, el editor producirá un mensaje de aviso.
:q!
Salir de VI sin guardar los cambios.
:s/secuencia/nueva_secuencia/opción
Sustitución. Esta orden sustituye la secuencia especificada por la nueva_secuencia. Si no se añade ninguna opción, sólo sustituirá la primera aparición de la secuencia. Si se indica la opción 'g', la sustitución se hará en todos los lugares en que aparezca. Por ejemplo, la orden ":1,$s/Dwayne/Dwight/g" sustituirá todo "Dwayne" por "Dwight".
:set [all]
Configura algunas opciones para personalizar VI y EX. La orden ":set all" muestra todas las opciones posibles. (Consúltese el apartado de personalización de VI para ver algunas de ellas.)
:una secuencia
Borra la abreviatura previamente definida por ":ab".
:unm teclas
Borra la asignación de funciones a nuevas teclas, definidas a través de ":map".
:vi nombre_de_archivo
Comienza la edición de un nuevo archivo. Si no han sido guardados los cambios, el editor le avisará de ello.
:w
Guarda el trabajo en el archivo actual.
:w nombre_de_archivo
Escribe el contenido del búfer en el archivo especificado.
:w >> nombre_de_archivo
Añade el contenido del búfer en el archivo especificado.
:wq
Escribe el contenido del búfer y cierra el editor.

Referencias

Ú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.