Manual de busybox vi

vi es un programa que permite editar archivos de texto. Es muy liviano y no requiere un entorno gráfico, solo requiere un terminal de texto para ser usado. En dispositivos embedidos, suele haber una versión proveida por el conjunto de herramientas BusyBox. BusyBox es también instalado en el sistema JSLinux.

La version vi de BusyBox es una implementación simplificada de ese editor que solemos encontrar en las distribuciones Linux comunes y corrientes. Tiene la misma filosofía de edición pero menos funcionalidades.

En esta página vamos a ver buena parte de las funcionalidades de busybox vi. Al final de la página se encuentra un resumen de comandos.

Usar vi

Arrancar vi

La forma más típica de arrancar el editor vi desde la línea de comando es dándole el nombre del archivo que queremos editar con vi archivo. Si el archivo archivo existe, el editor cargará su contenido. Si no existe, arrancará sin contenido, y el archivo se creará cuando guardemos el contenido del editor.

Modos de operación

vi es un editor modal. Eso significa que nuestros teclazos van a ser interpretados de manera distinta según el modo en qué estamos. Es una característica muy poderosa pero también un dolor de cabeza al principio.

busybox vi tiene tres modos de operación:

El modo comando es el modo por defecto. Se puede siempre volver a ese modo usando la tecla ESC. Los modos inserción y reemplazo son para editar texto. La única diferencia es que en modo reemplazo, los carácteres bajo el cursor son reemplazados, mientras que en modo inserción son desplazados a la derecha. El sub-modo comandos dos-puntos es un modo especial donde podemos ingresar desde el modo comando usando la tecla :.

El modo actual está indicado por un carácter en el rincón inferior izquierdo de la pantalla:

Mover el cursor

Cuando arrancamos vi, estamos en modo comando. Eso significa que no podemos ingresar texto, pero (entre otras cosas) podemos mover el cursor. Hay varias maneras de moverse en vi pero la manera básica es moverse de un carácter en cada dirección usando las teclas flechas.

Otro argumento en contra de usar las teclas flecha es que como busybox vi es usado en la mayoría de los dispositivos embedidos, es posible que su terminal no esté configurado correctamente para utilizarlas. En esa situación estarán frustrados cada vez que aprieten una tecla flecha.

Edición básica

Para tipear algun texto, necesitamos pasar al modo inserción. El comando más común para entrar a ese modo es i (para insertar antes de la posición actual del cursor). También está el comando R para entrar al modo reemplazo. Después de insertar texto, usamos ESC para volver al modo comando. Cuando estamos en modo inserción/reemplazo, podemos también suprimir texto usando las teclas SUPRIMIR o RETROCESO.

¿Cómo guardar el archivo y salir del editor?

Si estamos editando un archivo que ya tiene nombre, podemos usar ZZ en modo comando. Significa “guardar y salir” (e irse a dormir, por eso “ZZ…”).

Para guardar los cambios sin salir, podemos usar el comando :w (solo apretamos la tecla dos-puntos y luego tipeamos w, luego apretamos ENTER). En el caso que todavía vi no sepa el nombre del archivo (porque lo hemos ejecutado sin especificarlo) debemos agregarlo al comando de la forma siguiente: :w archivo.c.

Para salir, podemos usar el comando :q, pero vi no nos deja salir así si hay modificaciones que no fueron guardadas al archivo. Si no queremos guardar esos cambios y salir igual, agregamos ! al final del comando para forzar la salida: :q!. Para guardar y salir en un solo comando podemos usar :wq.

En estos comandos, w significa “write” y q significa “quit”.

Copiar, borrar y pegar

El modo comando no es solo para mover el cursor. Hay unos comandos que sirven para editar texto. El más básico es el comando suprimir. Apretamos la tecla x para suprimir el carácter que está bajo el cursor, y con X (mayúscula) suprimimos el carácter que está justo antes del cursor.

Podemos copiar una línea entera usando yy (o Y), y podemos borrarla completamente usando dd. Una línea copiada o borrada es copiada a una memoria temporaria, así que la podemos insertar después de la línea actual usando p, o antes de la línea actual usando P.

Más formas de moverse dentro de un archivo

Cuando editamos un archivo, solemos movernos bastante por todos lados. vi tiene unos comandos útiles para hacerlo de manera más eficiente.

El comando 0 (o la tecla HOME) nos trae al principio de la línea, mientras $ (o la tecla FIN) nos lleva al final. En lugar de ir al principio de la línea, si tenemos ganas de ir al primer carácter no blanco de la línea actual, usamos la tecla ^.

Podemos buscar secuencias de carácteres en el archivo. Para hacerlo, usamos el comando /xyz (seguido de ENTER) para buscar hacia adelante. Para repetir la búsqueda, usamos n (buscar la siguiente ocurrencia) o N (la anterior).

Para saltar directamente a una línea cuya posición conocemo, por ejemplo 45, podemos usar el comando :45.

Finalmente tenemos un comando muy útil, %, que saltar al símbolo que cierra (o abre) el paréntesis, la llave o el corchete al que tenemos bajo el cursor.

El comando punto

El comando punto (apretando la tecla .) sirve para ahorrar esfuerzos, porque repite el último comando que modificó el texto. Nada más. Por ejemplo, si acabamos de borrar una línea con dd, podemos borrar más líneas apretando la tecla punto varías veces.

Deshacer

busybox vi tiene un comando de “undo” simple con u (sin los dos-puntos). Podemos cancelar varios cambios volviendo a apretar u.

También tenemos el comando U que cancela todos los cambios de la línea actual desde la última vez que llegamos a esa misma. Lamentablemente no existe el “redo” o “volver a hacer”. Entonces ¡con cuidado!

Resumen de comandos

Moverse

h ir un carácter a la izquierda
j ir una línea abajo
k ir una línea arriba
l ir un carácter a la derecha
0 ir al principio de la línea actual
$ ir al final de la línea actual
w avanzar al principio de la palabra siguiente
e avanzar al final de la palabra siguiente
b ir atrás de una palabra
% ir al símbolo correspondiente: () [] {}
G ir a la última línea
gg ir a la primera línea

Las teclas flecha, principio y fin también funcionan como esperado.

Buscar

/xyz buscar la secuencia de carácteres xyz hacia adelante
n repetir la última búsqueda
N repetir la última búsqueda hacía atrás

Insertar texto

i insertar antes del carácter actual
a insertar después del carácter actual
o insertar una línea después de la línea actual
O insertar una línea antes de la línea actual
I insertar antes del primer carácter no blanco de la línea actual
A insertar despues del último carácter no blanco de la línea actual

Suprimir texto

x borrar el carácter bajo el cursor
dd borrar la línea actual
dM borrar hasta donde el movimiento M llevaría el cursor
D borrar desde la posición actual hasta el fin de la línea

El texto borrado es puesto dentro del búfer temporario.

Copiar y pegar texto con el búfer temporario

yy copiar la línea actual en el búfer
yM copiar texto al búfer hasta donde el movimiento M llevaría el cursor
p pegar el texto del búfer después de la línea actual
P pegar el texto del búfer antes de la línea actual

Modificar texto

rc reemplazar el carácter actual con c.
cc reemplazar la línea actual por una vacía, entra al modo inserción
C reemplazar desde la posición actual hasta el final de la línea
R entrar al modo reemplazo

Comandos empezando por dos-puntos

:q salir
:q! salir sin chequear que el archivo fue guardado
:w guardar el archivo
:wq guardar y salir
:10 ir a la línea 10

Estos comandos tienen que ser confirmados con la tecla ENTER.

Otros

u cancelar el último cambio
U cancelar todos los cambios en la línea actual
. repetir el último comando de cambio
ZZ guardar y salir

Fuentes

El contenido de esta página fue traducido y modificado a partir de las páginas siguientes: