noviembre 03rd 2006 Posteado en
De todo
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] archivoEntre las opciones más importantes se pueden destacar:
- -r : Recupera la copia del archivo que existe en los directorios temporales. Es útil en caso de que se haya apagado el terminal sin haber salvado el texto.
- -c : Ejecuta el comando, de vi, que se indica a continuación. Es útil para posicionarse en algún punto del archivo
En vi existen 3 modos de trabajo:
- Modo comando: cada tecla tiene un significado, y se puede desplazar el cursor, copiar, pegar, mover, borrar, etc. Hay que tener mucho cuidado, pues un comando en minúsculas o en mayúsculas tienen efectos muy diferentes.
- Modo texto: se emplea para añadir o modificar el texto del documento.
- Modo ex: inserción de comandos del editor de lÃneas ex. Se emplea para cambios masivos en el documento.
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 TERMo 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:
- Opciones set
set [opcion[=valor]]
- Abreviaturas ab
ab [abr] [cadena]
- Macros map.
map [Key|#n] [acción]
donde:
- Key : expresa una letra especial (no utilizada en vi). Por ejemplo v, V, q, K, Ctrl-A, etc. Las teclas correspondientes a las flechas se pueden definir como macros si es que no se encuentran definidas por defecto.
- n : expresa un número
- acción : es un comando de vi, teniendo en cuenta que antes de teclear un Escape o Return, o cualquier carácter de control hay que teclear Ctrl-v.
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.
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”. |