Manual vi
El vi es el editor estándar de Unix. Este trabaja en modo 'full screen' . El vi tiene dos modos de trabajo:
-comandos e insercción. En el modo comandos todo lo que el usuario introduce es interpretado como un comando;
-en el modo insercción lo que el usuario introduce es tetxo qu eserá guardado en el archivo de salida.
La mejor forma de aprender a utilizar el vi es utilizándolo por ejemplo modificando un archivo existente (sea cuidadoso no edite o modifique un archivo que sea necesario, utilice un archivo de test con una copia de un archivo. Por ejemplo haga lo siguiente
% vi test
Cuando Ud entra en el editor puede salir pasando primero al modo comando. Esta acción se realiza mediante la tecla ESC el cursor bajará a la última línea y pondrá los ':' este prompt (:) indica que está en el modo comando, por ejemplo para salir descartando todas las modificaciones es q! generalmente todos los comando son la primera letra de la acción (quit en este caso) y en el caso de ! indica que sin confirmación. Si se desean salvar los cambios será w (por write) y salvar los cambios y salir wq (por write & quit).
El editor se inicia en el modo comando. Hay diferentes formas de ir al modo de insercción pero siempre se regresa a este modo con la tecla de ESC. Si no se está seguro en que modo está presione el ESC hasta que oiga un beep, lo cual le indicará que está en modo comandos.
Los comandos básicos de vi son:
:wq | Salvar y Salir |
:q! | Salir sin salvar: |
a | Append: Modo insertar e la siguiente posición del cursor |
i | Insert: Modo insertar sobre la posición del cursor |
x | Borra caracter bajo el cursor |
dw | Borra palabra |
dd | Borra línea |
u | Deshacer (Undo) |
Ctrl-F | Pantalla sgte. |
Ctrl-B | Pantalla anterior |
O | Inserta línea en blanco |
El vi utiliza el editor ex cuando trabaja en modo comandos y siempre es la última línea de la pantalla con el prompt : por donde se le indican los comandos al ex. Los comandos admiten repetición que indicará cuantas veces se ejecutará el comando. Por ejemplo dd borra una línea pero 4dd borrará 4 líneas. La mayoría de los comando no producen salida por display de la acción, pero si cuando la acción es finalizada, por ejemplo cunado ponga 11dd (borrar 11 líneas) el vi le dirá '11 lines deleted'.
Movimientos dentro del archivo
Ud. debe estar en modo comando para moverse dentro del archivo. Generalmente las teclas de cursor funcionan bien (pueden no funcionar si Ud. está conectado a través de un emulador de terminal - desde un PC por ejemplo - y no coincide la variable TERM de Unix con la que Ud. está emulando, solución: cambie la variable TERM con -en csh- setenv TERM vt100 -en sh- TERM=vt100 export TERM y en el emulador seleccione como terminal vt100). Si Ud. está en modo insertar y presiona las teclas de cursor le insertará el caracter que ellas representan. Presionando la tecla RETURN se moverá a la siguiente línea. La tabla siguiente muestra los movimientos más comunes:
Return | Siguiente línea |
j | Siguiente línea |
k | Línea previa |
l | Siguiente caracter |
h | Caracter anterior |
Ctrl-F | Pantalla siguiente |
Ctrl-B | Pantalla anterior |
Ctrl-D | Media pantalla siguiente |
Ctrl-U | Media pantalla anterior |
[[ | Inicio documento |
]] | Fin documento |
nG | Ir a línea n |
w | una palabra a la derecha |
b | una palabra a la izquierda |
{ | fin párrafo |
} | fin párrafo anterior |
/string | Busca string |
Para ir a la línea 10 introduzca 10G (si sólo introduce G se moverá hasta el final del archivo). Para averiguaren que línea está presione Ctrl-G. Las palabras, sentencias, y párrafos tienen especial significado para el vi y existen comandos para moverse a través de ellas. Una palabra es cualquier caracter delimitado por blancos o puntuación y también cada símbolo de puntuación es una palabra. Sin embargo si Ud. utiliza la mayúcula del comando de movimiento se saltará la puntuación, por ejemplo B es lo mismo que b y mueve el cursor una palabra hacia atrás pero si hay un punto b se parará aqui pero B no.
Una sentecia es un string con un punto final y dos espacios en blanco. Con ) y ( Ud. se moverá hacia adelante una sentencia o hacia atrás respectivamente.
Un párrafo es el que termina con dos Return.
Las búquedas se realizarán en modo comando y para iniciarla debe presionar /. Esto causará que el cursor baje a la línea inferior, indique el string a buscar finalizando con un Return. Si desea buscar en orden inverso presione ? en vez de /.
Antes de ir al modo texto recordar que siempre se sale de él mediante un . La tabla siguiente muestra los
comando básicos para pasar a modo texto.
a | append inserta después del caracter sobre el cual estamos |
i | insert antes de caracter sobre el que estamos |
A | append al final de la línea actual |
I | insert antes del 1º caracter diferente de espacio en la línea corriente |
o | abre una línea en blanco abajo de la actual |
O | ídem anterior pero sobre la actual |
La única forma de corregir un error en modo texto es hacer un backspace y reintroducir los caracteres.
Correcciones más complejas deben ser realizadas desde el modo comandos. La tabla siguiente muestra los
comando que pueden ser utilizados:
x | borra caracter |
dw | borra palabra |
dd | borra línea |
r | reemplaza un caracter sobre el cursor |
R | reemplaza un string de caracteres (sobreescribe) |
cw | cambia una palabra |
s | sustituye un caracter por un string |
. | repite el ultimo cambio |
Un comando interesante es el punto (.) el cual repite el último cambio hecho en edición. Este puede ser
utilizado para cambiar cada ocurrencia de un string con otro, por ejemplo: si introducimos el comando /feo para buscar el string "feo". Entonces entre el comando cw e introduca "lindo" para reemplazar feo por lindo. Presione para aceptar el cambio. Para encontrar la siguiente ocurrencia introduzca el comando n y luego . para repretir el último cambio.
La flexibilidad del vi está en el editor ex. En particular operaciones de búsqueda global y reemplazo están soportadas por el ex. Siempre sabemos cuales son los comandos ex porque aparecerá los : como prompt. Para pasar al modo comandos del ex Ud debe introducir desde el modo comando del vi (no insertando) los dos puntos (:). En este modo el cursor bajará a la última línea del display y aceptará comando en modo ex. El comando es ejecutado cuando Ud. presiona el Return. Con Ctrl-C el comando es anulado. La siguiente tabla muestra alguno de los comandos básico del ex:
:w | Escribe el archivo |
:q | sale sin guardar cambios |
:e nombre | Edita archivo nombre |
:sh | ejecuta un shell sin salir del editor |
Movimientos dentro del ex
Sobre el ex puede ejecutar comando refiriéndose a las líneas del texto. Por ejemplo el punto (.) representa la línea actual, y el $ la última línea. Por lo tanto se pueden combinar tal como .,$ lo cual significaría desde la línea actual hasta hasta la última línea en el archivo. Combinando este tipo de especificación se pueden crear comandos tales como :.+1,$d para borra cada línea desde la actual hasta el fin del archivo. La palabra g puede ser utilizado para realizar el tratamiento com global.
El siguiente ejemplo es una búsqueda global con reemplazo para mostrar las capacidades del vi.
Se desea buscar la cadena viejo y sustituirla por nuevo, desde el principio al final del texto:
:1,$s/viejo/nuevo/g
Se desea buscar en todo el archivo "feo" y reeemplazarlo por "lindo":
:g/feo/s//lindo/g
Si se desea utilizar caracteres especiales de debe emplear el \ (backslash). Por ejemplo para reemplazar todos los $ en **:
:g/\$/s//**/g
El return también puede ser especificado introduciendo 'ControlV'.
La siguiente tabla da una referencia rápida con lo que soporta el vi (generalmente el vi tiene los mismo comandos en diferentes sistemas):
Obs: Los comandos comienzan por : y termina con return, preste atención a la tecla de Mayúsculas porque los comando difieren sin está apretada o no
vi file | edita file |
vi -r file | edita la última versión salvada de file (recupera) |
vi + n file | edita y pone el cursor en la línea n |
vi + file | ídem pero a la última línea |
vi file1 ... filen | edita file1 a filen, despues de salvar file1, presione n para la siguiente |
vi + /str file | edita y sitúa el curso en la línea que contiene str |
Salvar y Salir | |
ZZ o :wq o :x | salva y sale |
:w file | salva en file, si no existe file salva en la actual |
:w! | salva y no controla la protección de escritura |
n,mw file | salva desde la línea n a la m en file |
n,mw>> file | añade desde n a m al final de file |
:q | sale (si hay cambios no lo ejcuta el comando) |
:q! | sale (si hay cambios los descarta) |
Q | permite pasar al ex (:vi retorna) |
:e! | reedit el archivo actual, descarta los cambios |
| |
:.= | imprime línea actual |
:= | imprime nº de líneas en el archivo |
Ctrl-g | imprime status del archivo |
:l (ele) | imprime los caracteres especiales de la línea actual |
| |
a | append |
A | append después del final de la línea |
i | insert |
I | insert antes del cominezo de la línea |
o | inserta un línea nueva (abajo) |
O | inserta una línea nueva (arriba) |
Ctrl-V char | inserta el char (válido para insertar caracteres de control) |
:r file | lee file e inserta después de la línea actual |
:nr file | ídem pero inserta después de la línea n |
| |
u | undo último comando |
U | Restaura la línea al estado original |
"np | Retrive el n-esimo delete (hasta 9 max) |
n | repite el último / o ? (búsqueda) |
N | Ídem anterior pero en orden inverso repite la última (bísqueda) |
, | ídem anterior pero en orden inverso |
. | repite el último cambio de texto |
| |
{ | Marca las secciones cuando está en la primera columna |
[[ | Hacia atras y principo de sección |
]] | hacia adelante y principo de sección |
| |
k | arriba |
j | abajo |
h | izquierda |
l (ele) o Space | derecha |
w o W | siguiente palabra (Mayúscula ignora puntuación) |
b o B | palabra previa |
e o E | fin palabra |
0 o | | 1º columna |
$ | ultimo caracter en la línea |
+ o Return | 1º caracter de la línea |
- | 1º caracter no blanco de la línea |
G | última línea |
G$ | último caracter |
nG | linea n |
( | comienzo de sentencia |
) | cominezo de sgte sentencia |
{ | Comienzo de párrafo |
} | Comienzo de párrafo sgte |
| |
<- o Ctrl h | borra caracter en modo insertar |
Ctrl w | borra palabra en modo insertar |
Crtl x | borra texto insertado en modo insertar |
nx | borra n caracteres incluyendo el de la posición del cursor |
nX | borra n caracteres previos al cursor incluido |
D | borra desde posición actual al fin de línea |
ndw | borra n palabras |
| |
% | busca el comienzo de () [] {} |
fchar | busca hacia adelante char |
Fchar | busca hacia atrás char |
tchar | busca hacia delante linea actual |
Tchar | busca hacia atrás linea actual |
/str | busca string |
?str | busca string hacia atrás |
:set ic | ignore case |
:set noic | no ignore case |
| |
nyy o nY | copia n líneas en el buffer desde la actual |
p | print las líneas de buffer en la posición del cursor |
P | ídem pero antes del cursor |
1 comentario:
Si eres friki
Publicar un comentario