Unos meses después de incluir Vim en mis herramientas habituales, he aprendido algunas cosas nuevas que pueden valer la pena anotar y compartir.

/índice:

Mi .vimrc ahora

Como cabía esperar, mi .vimrc ha crecido. Lo he alimentado ojeando los dotfiles de otra gente, buscando en Stack Overflow y finalmente probando configuraciones hasta dar con lo que me hace falta en cada momento.

Aun así, siguen siendo ayudas adicionales. De las que me facilitan un poco la vida cuando trabajo en local, pero que tampoco echo de menos si estoy editando en otra máquina.

Entre lo que tengo ahora, destacaría 3 cosas:

  • Las configuraciones según el tipo de fichero, que se establecen en .vim/ftplugin/ y se detectan definiendo las reglas que quieras en .vim/ftdetect/. Hay que tener activado este plugin (viene por defecto con Vim):
    " Different config for each filetype
    filetype plugin on
    
  • La función para eliminar los espacios en blanco que sobran. Copié la idea de @ekaitz_zarraga:
    " Clear trailing spaces on <F2>
    function TrimWhiteSpace() "TODO: apply just on visual selection
    %s/\s*$//
    ''
    :endfunction
    command! -nargs=0 Tr call TrimWhiteSpace()
    
  • La función para colapsar todo el código con :zA e ir desplegándolo paso a paso. La encontré en esta respuesta:
    function UnrolMe()
    if $unrol==0
      :exe "normal zR"
      let $unrol=1
    else
      :exe "normal zM"
      let $unrol=0
    endif
    endfunctionEjemplos
    noremap zA :call UnrolMe()<CR>
    

También me gustan un par de coloreados que he añadido: el de resaltar las búsquedas y el de la barra horizontal a los 150 caracteres por línea cuando escribo en Markdown (amplié de 80 a 150 porque prefiero aprovechar más ancho de pantalla para esto). Dentro de un fichero .md, al llegar a este límite de caracteres en el modo Insertar automáticamente salta de línea, pero si al pegar algo o al editar un párrafo me paso de esta longitud de línea, lo formateo con gq. Con esta norma por línea consigo que mis .md (por ejemplo, estos posts) también sean legibles en texto plano. Manías, supongo 😅 O quizás “decisiones de diseño”… Según cuánto quiera justificarlo.

Macros

Al principio entraba en el modo “grabar macro” como todos: por error al pulsar dos veces la q 😂 Pero poco a poco he aprendido lo útil que puede ser una macro en el momento adecuado (¡mucho más que el poderoso .!) para repetir una serie de comandos todas las veces que haga falta. ¡Qué momento ese en el que ves la ocasión, grabas la macro bien a la primera y la reutilizas por todo el fichero a base de @@!

La mejor manera que se me ocurre de explicarlo es este caso de ejemplo que dan en la wiki Vim Tips.

#vimtricks

Por el camino he descubierto un puñado de pequeños trucos. Algunos solo son útiles para ocasiones puntuales; a menos que te encuentres muchas veces en esas situaciones, no los recordarás (ni falta que hace). Por ejemplo: cambiar el caracter actual entre mayúscula/minúscula con ~, intercambiar letras con xp (que es on actual char, extract and paste), abrir en el navegador web el enlace sobre el que estás con gx, etc.

Pero hay otras clases de atajos que sí son más frecuentes:

  • Fijar el tamaño del tab con :set tabstop=4spaces y convertir los tabs en espacios con :set retab (IndentationError de Python, te estoy mirando a ti)

  • Crear una sesión de Vim con :mksession mysession.vim para almacenar el estado de lo que tienes abierto, y recuperarlo con :source mysession.vim o directamente abriendo Vim con el argumento vim -S mysession.vim

  • Después de dividir la pantalla en ventanas (Ctrl+WS Split horizontal, Ctrl+Wv vertical y Ctrl+Wq para cerrar), redimensionarlas como iguales con Ctrl+W=. Si prefieres que tengan distinto tamaño, se puede agrandar con Ctrl+W> en el eje X y con Ctrl+W+ en el eje Y. También se puede especificar el tamaño numéricamente.

Vimium

Me he acostumbrado tanto a moverme por Vim sin levantar los dedos que no quería tener que renunciar a ello nunca más 😂 Y Vimium me permite hacer justo eso en Chromium: scrollear, ir al principio o al final de la página, ir hacia atrás o hacia delante en el historial, abrir cualquier enlace en esta pestaña o en otra… Todos los gestos básicos con los que manejarse entre webs, sin coger el ratón ni buscar teclas especiales. Diría que es casi con la mirada: encuentras a dónde quieres saltar, pulsas f y lo completas con la letra que aparece donde estás mirando. También tiro de ratón cuando es más rápido así, claro, pero me gusta poder recorrer Internet con las manos sobre el teclado.

Al menos a mí me resulta una forma más ágil de navegar, aún más en sitios habituales donde se repiten los atajos. Ahora pierdo un poco menos de tiempo yendo a donde quiero ir… Para poder perder más tiempo estando allí 😀