Usar Vim ya es una cosa, pero usarlo bien y exprimirlo es otra. Personalmente no me considero un experto de Vim, pero me ha ahorrado bastante tiempo y te quiero compartir algunos trucos con Vim.
Básicamente es una lista de tips o recomendaciones de Vim que he aprendido y recomiendo en mi día a día como programador. No es un tutorial de introducción, pero si estás pensando en comenzar a aprender Vim te invito a ver lo que puedes hacer con él y cómo es que Vim ahorra tiempo al usarlo para programar.
Te repito, yo no me considero experto, solo te comparto mi conocimiento.
Nota: si usas Windows mira cómo comenzar a usar Vim aquí.
Cosas básicas y no tan básicas de vim
Antes de mostrarte los tips, te comparto algunas cosas básicas de Vim en caso de que no conozcas mucho sobre el tema. También muestro algunos comandos iniciales, no técnicamente hablando, sino cómo los uso yo.
- Vim es independiente del lenguaje de programación, incluso puedes escribir tus notas con vim.
- Vim no solo corre en consola, puede ser integrado en Visual Studio Code y los editores de JetBrains
- Las posibilidades y combinaciones son infinitas. Solo debes aprender a hablarle a vim
- Presionar Escape (
ESC
) es probablemente lo que más realizarás al usar este editor. Siempre que quieras cancelar el comando actual o pasar al modo de navegación presiona ESC. No es pecado presionar ESC, en serio - Puedes Ir arriba con
k
, bajar conj
, izquierda conh
y derecha conl
(L de Luis pero en minúscula). No uses las flechas de navegación, están muy lejos. - Puedes usar
b
para ir hacia atrás más rápido - También puedes usar
w
ye
para ir hacia adelante $
va al final de la línea^
va al inicio de la líneagg
va al inicio del documentoG
va al final del documentodd
– Eliminar líneacc
– Cambiar toda la línearX
– Reemplazar carácter actual porX
s
– Reemplazar carácter actual y comenzar a escribirgg=G
para indentar el documento.gg
es para ir al inicio,=
es para identar yG
es para indicar el final. En español diría “Ve al inicio (gg
), e indenta (=
) hasta el fin (G
)”.
(sí, el punto) para repetir la acción
Ahora sí, pasemos a la guía.
Insertar al inicio y final de línea
La letra I
sirve para ir al inicio, poner el modo insert y estar listo para escribir. De manera similar, la letra A
sirve para ir al final de la línea.
En este caso nos ahorramos presionar la flecha de izquierda y derecha varias veces, pues sin importar la posición, navegamos al inicio y final con Vim en pocos movimientos.
Insertar líneas en blanco
Con la letra o
, sin importar el lugar en donde estemos, se inserta una nueva línea después de la actual y se comienza a escribir. Con la letra O
se inserta una línea en blanco antes de la actual.
Me gusta este comando porque te ahorra ir al final y presionar Enter, además de que en varias ocasiones ya inserta la tabulación o indentación adecuada.
Navegación hasta determinado carácter con ‘til
En modo normal, presionar tX
en donde X
es un carácter nos llevará hasta ese carácter en donde más tarde podemos presionar i
para empezar a escribir. También sirve TX
(fíjate en que la T es mayúscula) pero para ir en retroceso. Ejemplos:
- t“ navegar hasta las comillas siguientes
- t) navegar hasta el siguiente paréntesis
Si bien parece muy simple, sirve para navegar hasta determinado lugar y tomarlo como punto de partida para aplicar otro comando.
ciX: Change inside X
Cambiar lo que hay dentro de X
, en donde X es “algo”. Pueden ser comillas "
, paréntesis (
, corchetes [
, llaves {
, etcétera.
Cambiar dentro de las llaves
- Cambiar el contenido dentro de las llaves con
ci{
oci}
ci{
también sirve para cambiar valores en las plantillas cuando se usan mostachos{{}}
- Sirve para cambiar el contenido de arreglos en algunos lenguajes (como Java o C)
Me funciona cuando estoy en una plantilla de Angular o Vue y quiero cambiar todo el contenido, o cuando necesito cambiar todo el contenido de una función.
Cambiar dentro de las comillas
- Cambiar el contenido dentro de las comillas con
ci"
- También se puede hacer
ci'
para la comilla simple - Nota: en la grabación dice
Shift + 2
, que en mi teclado (latinoamericano) producen las comillas
Ahora tendrías que haber navegado hasta el final de las comillas y presionar backspace varias veces. O seleccionar con el mouse y borrar la selección. Con Vim te ahorras esto, presionas tres letras y ya está (sin mover los dedos del teclado).
Cambiar dentro de los corchetes
El único uso que me ha tocado es el de cambiar el contenido de arreglos que tienen la sintaxis []
como Python, PHP o JavaScript.
Puede ser con ci[
o ci]
Nota: en mi teclado, Shift + }
colocan el corchete ]
ctX – Change ‘til X
Cambiar lo que hay desde la posición actual hasta X
, en donde X
es “algo”. Pueden ser comillas "
, paréntesis, corchetes [
, llaves {
, puntos o cualquier carácter.
- Puedes cambiar desde la posición actual hasta lo que quieras (dentro de la línea)
- Por ejemplo, cambiar hasta el cierre de comillas con
ct"
- Cambiar hasta el punto con
ct.
- Cambiar hasta los paréntesis con
ct)
- Cambiar hasta una letra
- Igualmente sirve la
T
en mayúscula. Por ejemplo cambiar hasta la anterior comilla seríacT'
Sin la t igual puedes cambiar usando los caracteres especiales como:
- Cambiar hasta el final con
c$
- Cambiar hasta el inicio con
c^
Aquí el ejemplo:
Para la primer línea habrías seleccionado con el mouse, manteniendo shift con las flechas de dirección, etcétera. Con vim ahorras eso y le hablas al editor para que haga lo que quieres con pocas teclas presionadas.
En el segundo caso podemos detectar un carácter y cambiar solo hasta él. Y en el final, podemos ver cómo podemos cambiar todos los argumentos de una función desde la posición actual hasta el final.
dtX – Delete til X
Lo mismo que con change, pero ahora elimina. No pondré ejemplos pues sería repetitivo.
Repetir la acción con el punto
Realizar la última modificación hecha (no navegación, solo los cambios hechos). Recuerda que cada que presionas ESC se cambia el modo y se eliminan “los recuerdos” así que el .
solo sirve para la última acción hecha desde el último ESC.
En este caso estoy eliminando todo lo que hay hasta el cierre de comillas con dt"
. Para no hacer eso por cada línea, lo hago una vez y luego básicamente presiono j
para bajar la línea y luego el .
para repetir la misma acción.
T de tag – Podemos usar la t para referirnos a la etiqueta
Ahora la t
es como $
o ^
, es decir, no es una letra, es algo. Y ese algo es una etiqueta XML o HTML. Podemos:
- Cambiar lo que hay dentro de la etiqueta con
cit
- Eliminar lo que hay dentro de la etiqueta con
dit
- Cambiar alrededor de la etiqueta con
cat
(change around tag)
- Eliminar alrededor de la etiqueta con
dat
- Copiar la etiqueta con
yat
(yank around tag)
Nota: en algunos casos esta “sintaxis” no se reconoce.
Números
Podemos usar los números para repetir la acción determinada cantidad de veces. Por ejemplo:
- Bajar 5 líneas con
5j
- Reemplazar 5 caracteres por la M con
5rM
- Eliminar 3 líneas con
3dd
- Cambiar 3 caracteres y pasar al modo inserción con
3s
- Repetir 5 veces la última acción con
5.
Aquí un gif:
Conclusión
Aunque parezca repetitivo, simple o aburrido estoy seguro de que varias veces cuando programas has tenido que presionar una tecla varias veces para navegar hasta determinado lugar, o usar el mouse para posicionar el cursor en determinada posición.
Vim ahorra eso y hace que todo se haga con el teclado. No es un pecado usar el mouse ni las flechas de navegación, pero verás que una vez que uses y domines vim, lo demás te parecerá demasiado lento.
Por cierto, he grabado los Gifs con ScreenToGif. Te dejo dos guías de Vim que puedes usar para consulta:
Mira más sobre vim aquí, y sobre productividad aquí. Te dejo el código (por si quieres practicar) y los GIFs en mi GitHub.