EDITOR VI

 

El editor vi es el editor por excelencia de UNIX. Es bastante potente y complicado de manejar a pleno rendimiento, debido a la gran cantidad de opciones que tiene, pero es fácil dar los primeros pasos e ir avanzando poco a poco. Es difícil de utilizar al principio, pero puede llegar a convertirse en el más cómodo y rápido.

En UNIX existen otros editores más potentes, con entornos de trabajo más amigables, otros más sencillos de manejar, pero el único editor que está en todas las versiones y se maneja igual es el vi.

La sintaxis del comando vi es, al igual que la de cualquier comando UNIX:

vi [opciones] archivo

Entre las opciones más importantes se pueden destacar:

En vi existen 3 modos de trabajo:

Cuadro de Transiciones entre Modos

En las páginas siguientes se detallan los comandos más importantes de vi clasificados según el modo en que se ejecutan y las tareas que realizan.

vi es independiente del tipo de terminal, pero la variable de ambiente TERM debe estar fijada correctamente. Si no se conoce o no existe, en la base de datos de terminales del sistema, el tipo exacto de terminal con el que se está trabajando, se puede usar el tipo vt100 o el ansi (dan buenos resultados en la mayoría de los terminales).

Para modificar el tipo de terminal se deberá teclear:

TERM=[tipo de terminal];export TERM

o directamente:

export TERM=[tipo de terminal]

Con algunos comandos, especialmente more y a veces vi, el terminal o el emulador que se está usando pueden no responder bien, que no aparezcan los cambios que se realizan correctamente en la pantalla. En estos casos, puede usarse Ctrl-l para refrescar la pantalla.

Un usuario puede generar bajo su directorio $HOME un archivo llamado .exrc, en el que podrá adaptar el entorno del editor vi a su gusto. En este archivo se pueden incluir:

 

donde:

Tanto las opciones, como las abreviaturas y macros se pueden definir en modo ex para la edición en curso, pero solo tendrán valor durante la edición actual, no siendo válidas para las siguientes llamadas al comando vi. Por ello, para que afecte a cualquier llamada del comando vi, será necesario insertarlas en el archivo .exrc exrc (en el directorio de cada usuario). Para ver todas las opciones por defecto, desde vi habrá que escribir (en modo ex):

:set all

En la siguiente tabla podemos ver algunas opciones del editor que podemos encontrar:

OpciónAbrev.Valor por defectoEfecto al configurarla
all˜˜Presenta una lista de todas las opciones del editor en la pantalla.
autoindentainoaiComienza cada nueva línea de texto de la misma columna como la línea anterior (útil para los programadores).
ignorecaseicnoicHace que vi haga caso omiso de las mayúsculas y minúsculas durante las búsquedas.
numbernunonuNumera cada línea de texto.
readonly˜noreadonlyActiva la protección contra escritura en el archivo que esté en proceso de modificación. Esto impide que se cambie o destruya accidentalmente el contenido del archivo.
showmatchsmnosmMuestra el paréntesis o corchete de apertura cuando se escribe el correspondiente paréntesis o corchete de cierre. Esta opción resulta útil cuando se escriben expresiones matemáticas o se redactan programas en un lenguaje que utilice paréntesis o corchetes.
showmode˜noshowmodeMuestra un mensaje como MODO DE ENTRADA o MODO DE SUSTITUCION en la parte inferior de la pantalla siempre que se está en alguno de los dos modos.
wrapmarginwmwm=0 (cero)Cambia el margen derecho. n es igual al número de espacios que hay en el margen derecho. Por ejemplo, si utiliza un terminal de 80 columnas, :set wm=8 configura el margen derecho en la columna 72.

Como ejemplo, si en el archivo .exrc escribimos:

set nu
set showmode
set ai
ab xq por que
ab cqd como queriamos decir
map K :1^M

Cada vez que utilicemos el editor vi tendremos:

 

MODO TEXTO

 

Acceso a modo texto

i
Insertar antes del cursor.
I
Insertar al principio de la línea.
a
Añadir después del cursor.
A
Añadir al final de la línea.
o
Abrir línea debajo de la actual.
O
Abrir línea encima de la actual.
R
Sobreescribir (cambiar) texto.
r
Sobreescribir el carácter sobre el que está el cursor.
c 
Reemplaza caracteres.
cw 
Reemplaza palabras.
C o c$ 
Reemplaza hasta el fin de línea.
c0 
Reemplaza desde el comienzo de línea.

 

Los comandos de reemplazo admiten multiplicadores que consisten en un número antecediendo al comando. Al dar un comando de reemplazo el editor coloca un símbolo $ en donde termina el pedido de reemplazo. El usuario sobrescribe normalmente hasta donde necesite, y sale con la tecla ESC. Estos comandos admiten multiplicadores, por ejemplo 3cw abre un área de reemplazo para 3 palabras.

 

Otros

BS (Back Space)
Borrar carácter hacia la izquierda.
ESC
Salir de Modo Texto y pasar a modo comando.

 

MODO COMANDO

Algunos de estos comandos admiten multiplicadores, que consisten en un número antecediendo al comando.

 

Movimiento del cursor y Control de pantalla

flechas
Mover en distintas direcciones.
h ó BS (Back Space)
Una posición hacia la izquierda.
l ó SP (Espacio)
Una posición hacia la derecha.
k ó -
Una línea hacia arriba.
j ó +
Una línea hacia abajo.
$
Fin de línea.
0 (Cero)
Principio de línea.
1G
Comienzo del archivo.
G
Fin del archivo.
18G
Línea número 18.
Ctrl-G
Mostrar número de línea actual.
w
Comienzo de la palabra siguiente.
e
Fin de la palabra siguiente.
E
Fin de la palabra siguiente antes de espacio.
b
Principio de la palabra anterior.
^
Primera palabra de la línea.
%
Hasta el paréntesis que aparea.
H
Parte superior de la pantalla.
L
Parte inferior de la pantalla.
M
Al medio de la pantalla.
23|
Cursor a la columna 23.
Ctrl-f 
Una pantalla adelante.
Ctrl-b 
Una pantalla atrás.
Ctrl-l 
Refrescar la pantalla.
Ctrl-d 
Media pantalla adelante.
Ctrl-u 
Media pantalla atrás.

 

Búsqueda

/str
Buscar hacia adelante cadena de caracteres 'str'.
?str
Buscar hacia atrás cadena de caracteres 'str'.
n
Buscar siguiente (si se usó /) o anterior (si se usó ?).
N
Buscar anterior (si se usó /) o siguiente (si se usó ?).
fc
Buscar el siguiente carácter 'c' en la línea.
Fc
Buscar el anterior carácter 'c' en la línea.
tc
Ir al carácter anterior al siguiente 'c'.
Tc
Ir al carácter posterior al precedente 'c'.
;
Repetir el último comando f, F, t, o T.
,
último comando f, F, t, o T en sentido inverso.

 

La cadena a buscar en / o ? puede ser una expresión regular.

La acción de f, F, t y T alcanza sólo a la línea actual; si el carácter buscado no está en esa línea el cursor no se mueve.

 

Borrar, Copiar y Pegar

x
Borrar carácter bajo el cursor.
dd
Borrar línea, queda guardada.
D
Borrar desde cursor a fin de línea.
dw
Borrar desde cursor a fin de palabra.
d$
Borrar desde cursor a fin de línea.
d0
Borrar desde cursor a principio de línea.
d)
Borra hasta el final del párrafo.
Y o yy
Copiar línea.
P
Pegar antes del cursor.
p
Pegar después del cursor.
yw
Copiar palabra.
y$
Copiar de cursor a fin de línea.
"ayy o "aY
Copiar línea en buffer llamado 'a'.
'a' "ayw
Copiar palabra en buffer llamado 'a'.
"ap
Pegar desde buffer 'a', a la derecha del cursor.
"aP
Pegar desde buffer 'a', a la izquierda del cursor.
"bdd
Borrar línea y guardar en buffer 'b'.
"bdw
Borrar palabra y guardar en buffer 'b'.
J
Unir la línea actual y la siguiente (suprimir el retorno de carro).

 

Otros

ZZ
Grabar cambios si los hubo y salir.
u
Deshacer última acción.
U
Deshacer todos los cambios en una línea desde que se posicionó el cursor en ella.
.
Repetir el último comando.

 

MODO EX O ULTIMA LINEA

 

Generales

:q
Salir si no hubo cambios.
:q!
Salir sin guardar cambios.
:w
Guardar cambios.
:w arch1
Guardar cambios en archivo arch1.
:wq
Guardar cambios y salir.
:r arch2
Insertar un archivo.
:e arch2
Editar un nuevo archivo.
:e! arch2
Idem sin salvar anterior.
:r! comando
Insertar salida de comando.
:shell
Salir al shell (vuelve con exit).
:.=
Muestra el número de línea en que se halla en cursor.

 

Mover

:1
Mueve a línea 1.
:15
Mueve a línea 15.
:$
Mueve a última línea.

 

Opciones, abreviaturas y macros

:set
Cambio de opciones.
:set nu
Mostrar números de línea.
:set nonu
No mostrar números de línea .
:set showmode
Mostrar modo actual de vi.
:set noshowmode
No mostrar modo actual de vi.
:ab [abr] [cadena]
Cada vez que se teclee la cadena abr, ésta se expandirá escribiendo cadena.
:ab
Muestra las abreviaturas creadas.
:una [abr]
Elimina la abreviatura abr.
:map [c] [accion]
Genera la macro c que ejecutará la acción indicada.
:map
Muestra las macros definidas.

 

Otros

:[desde],[hasta] s/[buscar]/[reemplazar]/
Reemplaza todas la primera ocurrencia de la cadena [buscar], en cada línea, por la cadena [reemplazar] entre las líneas [desde] y [hasta] del archivo.
:[desde],[hasta] s/[buscar]/[reemplazar]/g
Reemplaza todas las ocurrencias de la cadena [buscar] por la cadena [reemplazar] entre las líneas [desde] y [hasta] del archivo.
:[desde],[hasta] d
Borra las líneas comprendidas entre las líneas [desde] y [hasta].

 

Ejemplos:

:1,$s/Martes/martes/g
Cambia Martes por martes en todo el archivo.
:.,5s/ayuda/&ndo/g
Cambia ayuda por ayudando desde línea actual hasta la 5ª línea.
:.,$ d
Elimina todas las líneas desde la línea actual al final del archivo.
:ab pp Hola Pepe
Cada vez que se teclee "pp " se expandirá en "Hola Pepe".