Resumen
Vi fue el primer editor de pantalla completa que existió. Es uno de los programas al que apuntan los detractores de UNIX®, pero también uno de los argumentos principales de sus defensores: si bien es complicado de aprender, también es una herramienta extremadamente potente una vez que uno se acostumbra a usarlo. Con unos pocos tecleos, un usuario de Vi puede mover montañas y, aparte de Emacs, pocos editores de texto pueden decir lo mismo.
La versión provista con Mandrakelinux es de hecho, Vim, por VI iMproved (VI Mejorado), pero lo llamaremos Vi a lo largo de este capítulo.
Si desea aprender más acerca de Vi, puede echar un vistazo a esta Introducción práctica al editor Vi (en inglés) o a la página principal de Vim.
Primero, necesitamos iniciar Vi, lo cual se hace exactamente como con Emacs. Así que, volvamos a nuestros dos archivos e ingresemos:
$ vi archivo1 archivo2
En este punto, Usted se encontrará frente a una ventana que se parece a la siguiente:
Ahora Usted está en modo comando frente al primer archivo abierto. En este modo, no puede insertar texto en un archivo. Para hacer esto, debe pasar a modo inserción.
Aquí tiene algunos atajos para insertar texto:
En modo de inserción,
Usted verá aparecer la cadena --INSERT--
en la
base de la pantalla (de esta forma, Usted sabrá en que modo se
encuentra). Este es el único modo que le permitirá insertar texto.
Para volver al modo comando, presione la tecla
Esc.
En modo de inserción, puede usar las teclas Retroceso y Supr para borrar texto a medida que avanza. Para desplazarse por el texto, tanto en modo comando como en modo inserción, utilice las teclas de las flechas. También hay otras combinaciones de teclas en modo comando, que veremos más adelante.
Usted accede al modo
ex presionando la tecla : en modo comando.
En la base de la pantalla aparecerá :
, y allí
se posicionará el cursor. Vi considerará todo lo que Usted
ingrese subsecuentemente, hasta la tecla Intro,
como un comando ex. Si borra el comando y los
:
que ingresó, volverá al modo comando y el
cursor retornará a su posición original en el texto.
Para grabar los cambios hechos a un
archivo, se ingresa la secuencia :w
en modo
comando. Si desea grabar el contenido del
buffer en otro archivo, ingrese
:w <nombre_de_archivo>
Para moverse, en el
mismo buffer, por entre los archivos cuyos nombres se pasaron en
la línea de comandos, teclee :next
para
moverse al archivo siguiente y :prev
para
moverse al archivo previo. Puede usar :e
<nombre_de_archivo>
también, lo cual le permite
tanto cambiar al archivo deseado, si es que ya está abierto, como
también abrir otro archivo. También puede usar el
completado.
Puede tener varios
buffers visibles en la pantalla a
la vez, como con Emacs. Para esto, use el comando
:split
.
Para cambiar de
buffer, ingrese Ctrl-w j para ir al buffer
de abajo o Ctrl-w k para ir al de
arriba. También puede usar las teclas de las flechas para arriba y
para abajo, en lugar de j o
k. El comando :close
oculta un buffer, el comando :q
lo
cierra.
Debe tener presente que si intenta ocultar o cerrar un buffer sin guardar los cambios, el comando no se llevará a cabo y Vi mostrará este mensaje:
No write since last change (use ! to override)
(no se
escribió desde el ultimo cambio (use ! para
forzar el comando)) En este caso, haga lo que se
le dice e ingrese :q!
o
:close!
.
Además de las teclas Retroceso y Supr en modo de edición, Vi tiene muchos otros comandos para borrar, copiar, pegar, y reemplazar texto – en modo comando. Aquí, veremos algunos. Todos los comandos que se muestran aquí están, de hecho, separados en dos partes: la acción a realizar y su efecto. La acción puede ser:
El efecto define al grupo de caracteres sobre los cuales actúa el comando.
h, j, k, l: un caracter a la izquierda, abajo, arriba, a la derecha[13] respectivamente;
e, b, w: hasta el final (respecto al comienzo) de la palabra corriente; del comienzo de la palabra siguiente;
^, 0, $: hasta el primer caracter no blanco de la línea corriente, hasta el comienzo de la línea corriente, hasta el final de la línea corriente;
f <x>: hasta la próxima
ocurrencia del caracter <x>
. Por
ejemplo, f e desplaza el
cursor hasta la próxima ocurrencia del caracter
e
;
/<cadena>
,
?<cadena>
: hasta la próxima
ocurrencia de la cadena o expresión regular
<cadena>
, y lo mismo yendo hacia
atrás en el archivo; por ejemplo, /pepe
mueve el cursor hasta la próxima ocurrencia de la palabra
pepe
;
{, }: hasta el comienzo, hasta el final, del párrafo corriente;
G, H: hasta el final del archivo, hasta el comienzo de la pantalla.
Cada uno de estos caracteres de efecto o comandos de movimiento puede estar precedido por un número de repetición. G referencia al número de línea en el archivo. A partir de esto, Usted puede hacer toda clase de combinaciones.
Si bien muchos de estos comandos no son muy intuitivos, pero como siempre, el mejor método es practicarlos. Aunque puede ver que la expresión “mover montañas con unas pocas teclas” no es tan exagerada.
Vi tiene un comando para copiar texto que ya hemos visto: el comando y. Para cortar texto, simplemente use el comando d. Hay 27 memorias para almacenar texto: una memoria anónima y 26 memorias que llevan el nombre de las 26 letras minúsculas del alfabeto inglés.
Para usar la memoria
anónima Usted ingresa el comando “tal cual”. Así, el
comando y12w
copia a la memoria anónima las
12 palabras que están después del cursor[14]. Si Usted
quiere cortar este área, use d12w
.
Para usar una de las
26 memorias nombradas, ingrese la secuencia
"<x>
antes del comando, donde
<x>
da el nombre de la
memoria. Entonces, para copiar las mismas 12 palabras en la
memoria k
, Usted puede ingresar
"ky12w
, o
"kd12w
para cortarlas.
Para pegar el
contenido de la memoria anónima, Usted usa los comandos
p o P (por
Paste, Pegar), para insertar texto
después o antes del cursor, respectivamente. Para pegar el
contenido de una memoria nombrada, use
"<x>p
o
"<x>P
de la misma forma (por
ejemplo, "dp
pegará el contenido de la
memoria d
después del cursor).
Para efectuar esta acción, nosotros:
volveremos a copiar
las primeras 6 palabras de la oración en la memoria
r
(por ejemplo):
"ry6w
[15];
pasaremos al buffer
archivo2
, que está ubicado abajo:
Ctrl-w
j;
pegaremos el
contenido de la memoria r
antes del cursor:
"rp
.
Obtenemos el resultado esperado, como se muestra en Figura 4.6, “VIM, después de copiar un bloque de texto”.
La búsqueda de texto
es muy simple: en modo comando, Usted simplemente ingresa
/ seguida de la cadena a buscar, y luego presiona
la tecla Intro. Por ejemplo,
/fiesta
buscará la cadena
fiesta
desde la posición corriente del cursor.
Presionar n lo lleva a la próxima ocurrencia, y
si llega al final del archivo, la búsqueda comenzará nuevamente
por el principio. Para iniciar una búsqueda hacia atrás, use
? en vez de /.
El comando para
salir, es :q
(de hecho, este comando cierra
el buffer activo, como hemos visto, pero si es el único buffer
presente, saldrá de Vi). Hay un atajo: la mayoría de las
veces, Usted edita un archivo solo. Entonces, para salir
utilizará:
Habrá notado que si tiene varios
buffers, :wq
escribirá el buffer activo y luego
lo cerrará.