miércoles, 6 de octubre de 2010

Curso básico de Unix (X)

Todo curso que se precie de Unix, tiene que tener un tema dedicado a Vi. Da igual el nivel del curso, da igual quien sea el público del curso, da igual que sea Unix o Linux. ¡Todo da igual! ¡Veras vi!

Vi puedes odiarlo o amarlo, pero nunca quedar indiferente. Le aman los administradores de sistemas y los frikis más frikis. Lo odiamos el resto.

Pero ¿que es vi y porque es tan importante?

Vi es un editor de texto tremendamente potente y complejo que se remonta casi sin cambios al origen de Unix. Su importancia radica en estar presente en todos los sistemas Unix sin excepción, y en todos los Linux, aunque allí se llama vim. Consume una cantidad ridícula de recursos y es tan potente y versátil que existen libros editados íntegramente con el. En contrapartida, es extremadamente difícil de usar en profundidad. Es poco amigable, no hay menús, y una misma orden puede significar cosas distintas según en el modo de trabajo en que te encuentres.

Al igual que los editores modernos, no trabaja directamente con el fichero, si no que lo hace con una copia temporal, que solo graba cuando nosotros se lo pidamos,  con lo cual podemos salir de vi sin grabar en caso de emergencia, sin temor a haber dañado el fichero original.

Vi tiene tres modos de trabajo. El primero, el modo comando, es el primero con el que nos encontramos siempre al iniciar vi.  En este primer modo, podemos realizar operaciones sobre el fichero, como insertar texto, añadir líneas, cambiar de pagina… Existen una serie de comandos que nos harán pasar  al modo texto, que es en el que escribimos en el fichero. Con escape volveremos al modo comando. Desde el modo comando también podemos pasar al modo línea pulsando el comando : En este modo, realizamos operaciones sobre todo el fichero, tales como grabar, grabar y salir, salir sin grabar… Desde este modo también podemos volver al modo comando pulsando escape.


Pero vamos a verlo con un poco mas de calma. Iniciamos vi desde la línea de comandos, tecleando vi y el nombre de un fichero (vim, si estas en Linux). Si el fichero ya existe, se creara una copia temporal, con la que trabajaremos hasta que decidamos guardar. Si el fichero no existe, se crearan dos, uno de texto vacío, y otro temporal con el que se trabaja hasta la hora de grabar.

Bien, ya estamos en vi, con un fichero que ya tiene contenido. Estamos en modo comando, y podemos ver el texto que contiene. Nos podemos mover por el con los cursores, y también con las teclas “k”, “j”, “l” y “h” que hacen la misma función. Pero aquí no acaban nuestras posibilidades para movernos por el fichero, tenemos, entre otras, las siguientes posibilidades:

$ fin de línea
0 principio de línea
1G comienzo del archivo
G fin del archivo
numG línea número num
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
H parte superior de la pantalla
L parte inferior de la pantalla
M al medio de la pantalla

Bueno, si lo que queremos es leerlo, esto esta muy bien, pero vamos a suponer que queremos editarlo, insertar líneas, borrar… Tendremos que pasar al modo texto con alguno de los siguientes comandos.

i insertar antes del cursor
I insertar al principio de la línea
a insertar después del cursor
A insertar al final de la línea
o abrir línea debajo de la actual
O abrir línea encima de la actual
R sobrescribir texto

Una vez en modo texto, podemos escribir tranquilamente lo que necesitemos, y luego volver al modo comando pulsando “esc”. Ahora vamos a buscar texto en nuestro fichero. Esto lo hacemos desde el modo línea. Como ya estamos en modo comando, pasamos al modo línea pulsando “:

:/texto busca hacia adelante la cadena 'texto'
:?texto busca hacia atrás la cadena 'texto'
:n repite el último comando / o ?
:N repite el último comando / o ? en dirección contraria
:fcaracter busca el siguiente carácter 'caracter' en la línea
:Fcaracter busca el anterior carácter 'caracter' en la línea
:; repite el último comando f, F
:, repite el último comando f, F en dirección contraria.

También podemos copiar, pegar, borrar… Siempre desde el modo comandos.

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
"aY copiar línea en buffer llamado 'a'
'a' "ayw copiar palabra en buffer llamado
"ap pega desde buffer 'a', a la derecha del cursor
"aP pega 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'
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

También podemos reemplazar texto. Para ello tenemos que estar en modo línea, y la sintaxis para el reemplazo es la siguiente:

:’buscar-desde’,’buscar-hasta’s/’que-buscar’/’reemplazar-por’/g

Veamos un ejemplo, que será más esclarecedor. Para eso vamos a buscar desde la línea en la que nos encontramos hasta el final y reemplazaremos pedro por Pedro.

:.,$s/pedro/Pedro/g


Como toda orden en modo línea, empieza por :, luego indicamos buscar desde ., es decir, desde donde estamos y separado por una coma, hasta donde buscamos, en este caso, el final, $. Luego con s/ indicamos que buscar, en este caso pedro y con /Pedro indicamos porque cambiarlo. /g nos indica que lo haga de manera global.

Y antes de que te vuelvas loco, será mejor que te indique como salir de vi. Se hace desde modo línea.

:q salir (si no hubo cambios)
:q! salir sin guardar los cambios
:w guardar cambios
:w nombrearchivo guarda cambios en el archivo nombrearchivo
:wq guardar cambios y salir
:r fichero insertar un archivo
:e otrofichero editar un nuevo archivo
:e! otrofichero  igual, pero  sin salvar anterior fichero con el que trabajamos
:r! comando insertar el resultado de la salida estándar de comando
:shell salir al shell (vuelve con exit)

Vi tiene muchas mas posibilidades, pero si logras manejar con soltura estas, no solo serás un friki, si no que además tendrás infinitas posibilidades para editar cualquier fichero que te pongan por delante.

No hay comentarios:

Publicar un comentario

prekes sodui