Recursos de Vim

Pulsa aquí para desplegar la evangelización.

Ahora que he terminado de evangelizar, recopilo a continuación algunos recursos relacionados con Vim. Existen listas colaborativas de este estilo (ver esta por ejemplo), pero aquí recojo solo aquellas que me ayudan en mi día a día de persona que hace mates y ocasionalmente programa de forma compulsiva. Ver también mi configuración de Neovim en mis dotfiles.


Aprender a usar Vim

Yo creo que lo mejor para aprender Vim es usarlo. Hay que intentar escribir todo lo que se pueda con Vim para aprender al principio.

El tutorial clásico es vimtutor: tras abrir Neovim, escribe “:Tutor” y pulsa Enter. Si además quieres leer un libro, recuerdo haber leído un poco de “Practical Vim” y también recuerdo que me gustó. Otra cosa que creo que es positiva es ver a gente usando Vim. Para esto último cualquier video es bueno.

No hay que volvernos tuturalatas pensando en usar siempre la mínima cantidad de tecladas pulsadas. Alguien que sea muy pro me verá usar Vim y podría pensar “wow, este tipo es un manta. Ha pulsado cuatro veces la w en vez de hacer 3w y ahorrarse dos pulsaciones”. La forma en la que yo uso Vim es funcional y suficientemente rápida a mi juicio, eso es todo lo que importa. No dejo de lado el hecho de que me parece divertido vimgolf (ver más abajo).


Vim en la terminal

El comando set editing-mode vi activa el modo vim (o modo vi). Lo que hace es cambiar una opción de la librería readline (ver man readline). Los intérpretes de algunos lenguajes de programación la utilizan, así que esto les dota también de un modo vim. Además, el comando set keyseq-timeout 10 hace que la tecla ESC tenga efecto inmediato, algo necesario para usar Vim cómodamente. Ambos comandos hay que añadirlos al fichero ~/.inputrc para que tengan efecto permanente.

Si solo quieres cambiar a modo vim en bash (también funciona para otras shells), puedes usar el comando set -o vi (ver man bash). Hay que añadirlo, por ejemplo, al fichero ~/.bashrc para que sea permanente. Este comando es útil memorizarlo para poder tener un modo vim temporal de forma rápida en una máquina ajena.


Teclas turborrápidas

Si usas X11 (es lo estándar en las principales distribuciones Linux), entonces puedes usar el comando xset r rate 300 60, el cual aumenta la frecuencia con la que se dispara una tecla al dejarla pulsada. Otro imprescindibles es setxkbmap -option caps:swapescape, que intercambia las teclas ESC y Bloqueo de mayúsculas (pensemos en que la tecla de Bloqueo de mayúsculas está en una posición muy accesible al lado del meñique izquierdo a pesar de ser una tecla que no solemos usar. La tecla ESC está a tomar por saco y es quizás la tecla que más usamos cuando utilizamos Vim).


Jupyter

En este momento, jupyter no admite modo vim. Sin embargo, jupyterlab tiene un sistema de extensiones para el que existe esta. Está disponible en el AUR.


Excel

Esta extensión de Libreoffice funciona bien. Otra alternativa es usar algún programa de terminal (los cuales no he probado) como este.


Aquí no veo una solución clara. El problema principal es que muchos de los navegadores “Vim” funcionan excelentemente, pero muchos flashean una pantalla en blanco al entrar en una página nueva, algo muy molesto para una persona sensible a las luces. En otros, aplicaciones web como outlook no funcionan correctamente o son muy difíciles de usar.

Recomiendo la extensión de Firefox Tridactyl (también hay extensiones para Chrome, pero no las he probado). Si quieres un navegador full Vim, recomiendo Qutebrowser. La opción de usar una extensión en Firefox me parece más robusta, aunque la experiencia Vim de Qutebrowser es claramente mejor porque las extensiones de los navegadores muchas veces se sienten como si fueran parches.


vimgolf

En el golf tienes que meter una pelota en un hoyo con pocos golpes. En vimgolf tienes que transformar un fichero en otro pulsando pocas teclas. Es útil para aprender nuevas técnicas ninja. Aunque los mortales no implementemos lo aprendido en la edición del día a día, me parece un recurso divertido.


Python y SageMath

El intérprete de Python actualmente no usa la biblioteca readline (ver el apartado anterior sobre Vim en la terminal), lo que significa que no se puede configurar su modo vim mediante cambiar las opciones de esta. En su lugar, se le puede forzar a que sí la utilice mediante declarar una variable de environment de la siguiente manera en la shell: export PYTHON_BASIC_REPL=1. Como antes, hay que añadirla al .bashrc para hacer el cambio permanente.

Para incorporar un modo vim al intérprete de Sage, la solución que he encontrado es crear un fichero ~/.sage/ipython-5.0.0/profile_default/ipython_config.py que contenga lo siguiente:

c.TerminalInteractiveShell.editing_mode = 'vi'
c.TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode = False
c.TerminalInteractiveShell.timeoutlen = 0.25

Overleaf

Afortunadamente🤲🤲🤲, ahora mismo Overleaf tiene un modo vim nativo. Para incluir un pequeño “.vimrc” se puede usar un script de tampermonkey como explica este post.


Text objects

Aunque estoy diciendo Vim todo el rato, esto es todo una farsa: yo uso Neovim. Este tutorial explica cómo crear nuevos text objects con Lua. La utilidad de esto es la siguiente. Si estamos escribiendo código LaTeX, a menudo querremos editar lo que hay entre dos símbolos $. Si fueran paréntesis, podríamos simplemente hacer “ci(” desde el modo normal. Las siguientes líneas de Lua se pueden usar para que Neovim permita hacer “ci$” y similares.

vim.api.nvim_set_keymap('x', "i" .. '$', string.format(':<C-u>silent! normal! f%sF%slvt%s<CR>', '$', '$', '$'), { noremap = true, silent = true })
vim.api.nvim_set_keymap('x', "a" .. '$', string.format(':<C-u>silent! normal! f%sF%svf%s<CR>', '$', '$', '$'), { noremap = true, silent = true })
vim.api.nvim_set_keymap('o', "i" .. '$', string.format(':<C-u>silent! normal! f%sF%slvt%s<CR>', '$', '$', '$'), { noremap = true, silent = true })
vim.api.nvim_set_keymap('o', "a" .. '$', string.format(':<C-u>silent! normal! f%sF%svf%s<CR>', '$', '$', '$'), { noremap = true, silent = true })

  1. Suponiendo que sabemos escribir sin mirar. Si no es así, este razonamiento no tiene ningún sentido. También estoy suponiendo que usamos un teclado QWERTY y no uno AZERTY, DVORAK o XDLOL.↩︎