Continuando con los posts sobre mis editores, hoy hablaré un poco de Vim, el omnipresente editor de los sistemas UNIX. Es de sobra conocida la polémica entre editores, que al final es una cuestión de gustos. En mi caso, Vim reúne varias de las cualidades que me gustan en un editor. La primera y por la que definitivamente me decidí a usarlo en serio (fíjate si soy tontaco 😂), es porque, al ser una herramienta de línea de comandos, me permitía ponerle fondo translúcido. Este tipo de detalles son los que marcan la diferencia para mí 😁
Pero, más en serio, hay unos cuantos factores más importantes que me atraen como para que se haya convertido en mi editor de terminal preferido.

/índice:

Por qué Vim

Ya he señalado de pasada la omnipresencia de Vim: que esté instalado en casi cualquier máquina GNU/Linux en la que vayas a trabajar es un gran punto a favor. Sobre esto, también mencionaría que precisamente porque te puede tocar trabajar en un Vim “a pelo”, sin tus extras ni tu configuración propia, conviene acostumbrarse al flujo de trabajo de Vim por defecto. Aunque luego en nuestra máquina habitual retoquemos Vim con pequeñas mejoras a nuestro gusto, creo que mantener esas “necesidades de personalización” al mínimo a la larga es una ventaja, para no sentirse como un pulpo en un garaje cuando no dispongamos de nuestro .vimrc.

Pienso que Vim en cierta manera encaja con la primera norma de la filosofía UNIX: “Make each program do one thing well”, un principio del que soy muy fan. Cuando uso Vim quiero un editor de texto, no “un sistema operativo que necesita un editor mejor” 😛 Y si luego quieres extender alguna función de Vim, siempre puedes escribirte tu propio script o buscar el que mejor te vaya entre los miles que ya hay escritos.

Dominando el lenguaje de Vim

Cito aquí algunas observaciones que hizo el desarrollador Chris Toomey en su charla Mastering the Vim Language y que me han parecido reseñables. Explican la filosofía de Vim mejor de lo que yo podría hacerlo.

“Mucha gente habla de lo rápido que puedes ser en Vim. Pero no es un tema de velocidad. La velocidad es un beneficio que obtienes al usar Vim, pero no es la razón principal por la que uso Vim. Uso Vim porque no tengo que pensar”

“Typing is not the bottleneck”

El tiempo más importante no es el que paso escribiendo; es el que paso pensando.

“En cuanto a pensar, estoy limitado de dos formas: estoy limitado en tiempo (lleva un tiempo pensar) y, lo que es más importante, estoy limitado en la cantidad de pensamiento útil que puedo usar en un día. Y, francamente, no quiero tener que emplear ninguna unidad de pensamiento en mi editor. Por eso amo Vim.”

Vim me da un lenguaje para expresar los cambios que quiero hacer, de la forma más concisa, eficiente y fácil de interactuar posible.”

“La mayoría de los editores tratan la inserción de texto como la acción principal. Vim se centra en el hecho de que los programadores / editores / escritores en general pasamos la mayor parte del tiempo editando, no escribiendo.”

“Verbos” en Vim:

  • d: Delete
  • c: Change (borrar y entrar en modo Inserción)
  • >: Indent
  • v: Visually select
  • y: Yank (copiar)
  • .: Repeat last action

Algunos operadores frecuentes tienen atajos, como los que se refieren al caracter actual bajo el cursor:

  • x: Delete character under cursor
  • r: Replace character under cursor with another character
  • s: Change character under cursor (borrar y entrar en modo Inserción)

Word motions:

Mover el cursor a:

  • w: word
  • b: beggining of the word
  • e: end of the word
  • $: end of the line

Expresiones de ejemplo:

  • 5j: down 5 lines
  • gg: Go to start
  • dt": Delete to the next double quote
  • ciw: Change in word

Mi .vimrc

Toda la configuración de Vim reside en el fichero .vimrc, que cada usuario pone en su /home/usuario/ (además está el directorio .vim/ para plugins y así). Ahí cada uno incluye sus atajos, plugins, ajustes por defecto, etc.

vim-logbook

Ya sabéis que yo no soy de muchos plugins, pero hay uno que uso a diario y me encanta por su simplicidad y utilidad: vim-logbook. Facilita llevar un cuaderno de bitácora para programadores o cualquier otro profesional. Lo encontré de casualidad en el post “Using a logbook to improve your programming” de James Routley, y me vino al pelo para trasladar mis notas tomadas con papel y boli a un formato igual de ágil pero con las ventajas añadidas de lo digital. El backup que hago todos los días con rsync posibilita recuperarse de catástrofes como aquella del rm -rf 😅

ttymetracker

Aprovechando vim-logbook, últimamente he desarrollado una herramienta que también uso a diario: ttymetracker, el time-tracker de terminal. Con ella, además de anotar lo que voy haciendo y aprendiendo, gestiono también mi lista de tareas pendientes (con el módulo todo-list). Aparte, escribí un módulo llamado anuko, con el que, en vez de tener que rellenar un formulario por cada tarea en este sistema open-source de control de tiempo que empleaba mi empresa, las publicaba todas de golpe una vez al día, al estilo commit de Git. No sé si esta misma aplicación se usará en algún otro sitio, pero por si le puede ser de utilidad a alguien (aunque sea adaptando la idea), aquí queda.

Por lo demás, mi .vimrc se compone de pocas líneas (al menos por ahora, que dentro de un tiempo igual ojeas mis dotfiles y el .vimrc se ha desmadrado 😂). Explicado en los propios comentarios, queda así:

call plug#begin('~/.vim/plugged')
Plug 'jartigag/vim-logbook'
call plug#end()

" `jj` quits Insert mode
:imap jj <Esc>

" `right` and `l` wrap to the beginning of the next line, the same with `left` and `h`:
:set whichwrap+=>,l
:set whichwrap+=<,h

" mouse support
set mouse=a

" don't allow broken words at the end of the line
set linebreak

Las primeras tres líneas corresponden al plugin que he comentado (la versión que retoqué), instalado mediante el gestor minimalista de plugins vim-plug. ¿Por qué elegí este gestor? Pues no sé, por sencillez. Había más, y tendrán sus diferencias, pero de momento con este me vale.

Hasta aquí llega lo que sé sobre Vim a día de hoy. Si sigo descubriendo nuevos trucos y magia en el mundillo de los editores como para hacer un nuevo post, no dudéis que lo compartiré en este mismo blog.