Últimamente este editor ha comenzado a tener mala prensa. Se dice que es difícil, anticuado.
En este artículo intentaremos mostrar 10 características distintivas de vim. Muchos creen que VIM es parte de un caprichoso rito de iniciación al mundo UNIX/Linux. Usar VIM no es un hábito snob de algunos geeks, sino una manera de aumentar la productividad.
La cuestión es que algunas distribuciones incluyen de manera predeterminada vi en lugar de VIM. El usuario principiante entonces, al tropeza con aquél, huye hacia otros editores en apariencia más fáciles pero mucho menos potentes. Aquí mostraremos 10 funcionalidades que posee VIM que difícilmente otro editor de texto puede ofrecer, al menos todas juntas.
Cabe aclarar que el siguiente listado es para usaurios que poseen un conocimiento básico de VIM. ¿Todavías no lo tenés? ¡Usá la herramienta vimtutor!
0. Concentrarte en el texto
Muchos editores poseen una gran cantidad de botones y de menús, pero eso muchas veces quita espacio en la pantalla, además de distraernos. VIM está libre de esas intereferencias.
Incluso, tiene plugins y configuraciones para acentuar estas características.
¿Queremos leer y/o editar archivos de texto o tener que aprendernos para que sirve cada botoncito u opción de cada menú? ¿Qué sentido tiene?
1. Comprobar la ortografía
El comando en modo ex:
:setlocal spell spelllang=es_MX
Establece el idioma que utilizará ViM para la corrección ortográfica. El corrector resaltará las palabras con errores. Al situar el cursos en la palabra mal escrita y usar el comando z=
aparecerá una lista de palabras alternativas para reemplazar la incorrecta.
2. Operaciones con bloques
Es común al editar archivos con código fuente encontrarnos con porciones de texto encerrados entre algunos de estos caracteres:
- <Esto es un Ejemplo>
- “Esto es un Ejemplo”
- ‘Esto es un ejemplo’
- (Esto es un ejemplo)
- [Esto es un ejemplo]
- {Esto es un ejemplo}
Para seleccionar el texto encerrado entre signos “<” y “>” podemos usar el siguiente comando:
vi<
Si quisieramos seleccionar el texto incluyendo los signos deberíamos usar:
va<
En castellano una regla mnemotécnica útil es:
- i: interior
- a: afuera (inclusive)
Para seleccionar cualquiera de los otros bloques, sencillamente hay que reemplazar el caracter delimitador del bloque.
Esto es muy útil para archivos html, en la siguiente imagen se muestra como se puede seleccionar todo un tag mediante el comando vat
:
Por supuesto en lugar del comando inicial v se pueden usar otros tales d, y y c.
3. Viajar en el tiempo (controlar ediciones… casi como si fuera GIT)
Este una funcionalidad que ya presenté en un un artículo anterior, pero que tiene sentido mencionar una vez más:
Con Vim se puede volver al estado que tenía el archivo 10 minutos atrás con el comando en el comando en modo ex:
:earlier 10m
Por supuesto, se puede volver al futuro con:
:later 10m
¿Qué pasa si no se pone ‘m’? En eseo caso se retrocede o avanza la cantidad de ediciones especificada.
4. Automatización de operaciones
Hay una manera muy sencilla de repetir operaciones: y es a través del comando .
Dicho comando repite el último comando y repetirlo la cantidad que sea necesaria, sencillamente usando el “punto” las veces que sea necesario. Cuando el comando a repetir es muy complejo es una función de extrema utilidad.
Otra manera de repetir operaciones es anteponiendo un número de veces. Por ejemplo, el comando 10p
pega 10 veces el contenido del buffer.
También se pueden usar macros para automatizar tareas utilizando macros:
- Prendemos la grabadora con qa
- Ejecutamos los comandos deseados
- Detenemos la grabadora con q
- Reproducimos el comando con @a
Por ejemplo podríamos usarlo para estructurar un documento en markdown de la siguiente manera:
-
:set nf+=alpha
(Para habilitar el incremento de caracteres alfabéticos)
- Tipeamos
## A.
(sin las comillas)
qa
yyp
- Usamos el atajo de teclado Ctrl-a (Para incrementar)
q
- Utilizamos 10@a (el número 10 es un ejemplo)
5. Abrir dos archivos al mismo tiempo
Esta función es extremadamente útil. Hay varias maneras de hacerlo, aquí mostraré una manera de hacerlo.
Por ejemplo, si tenemos un archivo y queremos copiar el contenido de otro archivo, debemos ejecutar este comando en modo ex:
:split /etc/squid3/squid.CONF
Desde luego la ruta del archivo es un ejemplo. Luego podemos copiar, cortar, pegar entre las diferentes como es habitual. Lo más importante es saber como pasar entre ventanas: primero se emplea el atajo de comandos Ctrl-w y luego la tecla de la flecha en dirección a la ventana deseada.
Si esto parece complicado, se puede usar incluso el modo ex:
:wincmd j
6. Editar un archivo web al vuelo
Supongamos que estamos copiando código libre de un sitio web a un archivo, podríamos usar el comando siguiente:
vim http://www.fsf.org/index.html
Luego de presionar Enter se descarga el archivo html y se abre una copia en el editor. ¿No es maravilloso?
7. Editar un archivo remoto a través de ssh
Este método es múy útil en particular cuando se utilizan claves públicas para autenticar. Hay que hacer así:
vim scp://root@192.168.80.148//etc/squid3/squid.conf
A diferencia del ejemplo anterior este comando edita efectivamente el archivo remoto. Obviamente usa un archivo local de manera temporaria hasta que guardamos los cambios…
8. Explorar archivos
Aquí mediante el comando
:e .
Se abre un explorador de archivos que permite por ejemplo copiar archivos de un directorio a otro.
El procedimiento es tal vez contraintuitivo, pero no por eso es complejo.
- Se navega como es habitual en gestor de archivos hasta encontrar el directorio de destino. Ubicado allí el cursos se usa el comando
mt
.
- Luego buscamos el archivo que queremos copiar y usamos los comandos
mf
y mc
.
¡Listo! Se copió el archivo al directorio de destino.
9. Autocompletar texto
Si tenemos que volver a tipear una palabra larga podemos hacerlo rápida y fácilmente con el atajo de teclado Ctrl-p.
En el ejemplo siguiente queremos ingresar rápidamente la función isunordered:
VIM tiene además, otras maneras de completar téxto fácilmente mediante el atajo de teclado Ctrl-x. Por ejemplo ingresando luego el atajo de teclado Ctrl-f, podremos escribir rutas de archivos velozmente: