Vim sin Esc

Como ya comenté en una entrada anterior, la tecla Esc de mi teclado, además de pequeña, está mal
colocada. Para quien usa mucho el editor Vim eso es un problemón, porque Esc es una de las teclas
más usadas: con ella se entra en el modo de comandos (normal mode).
Incluso en teclados más corrientes, el largo recorrido hasta esa tecla no resulta natural.
¡Y de hecho no lo es!
Cuando Bill Joy creó vi usaba un ADM-3A. Con solo mirar el teclado de ese ordenador
se entiende el porqué de algunas elecciones de teclas: las flechas de movimiento estaban impresas en
HJKL y el Esc se encontraba donde hoy tenemos el Tab.
Como siempre, hay más de una forma de sortear el problema. Aquí muestro 5 alternativas a la tecla Esc.
Ctrl-[
En Vim, Ctrl-[ hace exactamente lo mismo que Esc. Aunque son dos teclas, resulta mucho más cómodo
y exige menos desplazamiento. Seguramente cuesta algunas semanas acostumbrarse, pero tiene la
ventaja de no necesitar ninguna configuración extra, porque es un comando integrado en Vim. (Ver
:help i_CTRL-[)
Ctrl-c
En otros editores este suele ser el comando para copiar texto, pero en Vim Ctrl-c sirve para salir
del modo de inserción y volver al modo normal. No es exactamente idéntico a Esc, pero en la práctica
se le parece bastante. En cualquier caso, en mi teclado Ctrl-[ es mucho más cómodo. (Ver
:help i_CTRL-C)
Alt/Meta
En mi terminal, pulsar Alt+alguna_tecla equivale a pulsar Esc y luego esa tecla. Tampoco es exactamente igual que Esc, porque añade una acción o movimiento y solo funciona en algunos terminales. Pero es muy útil. Por ejemplo:
Alt+hjkl: movimientoAlt+o: abre una línea nueva debajo de la posición actualAlt+A: append al final de la línea actualAlt+p: pega en la posición actual
Asignaciones en el .vimrc
Hay quien asigna Esc a una combinación de teclas; las más interesantes son:
imap ;; <Esc>
imap jk <Esc>
imap ii <Esc>
Pero tendrás problemas si algún día necesitas escribir ;;, jk o ii.
Intercambia el Esc con el Bloq Mayús
Por fin mi opción favorita, aunque exige algo más de configuración: como el Bloq Mayús es una tecla modificadora, no podemos reasignarla desde Vim.
Habrá que cambiar la función de la tecla en todo el sistema, lo que sinceramente no es un problema, porque casi nunca uso el Bloq Mayús. Hay más de una forma de hacerlo.
Setxkbmap
Lo más sencillo es usar setxkbmap, que tiene una opción específica para intercambiar el Bloq Mayús con el Esc:
setxkbmap -option caps:swapescape
Añade ese comando al .xinitrc si quieres que se ejecute cada vez que arranca X. En mi caso también
uso setxkbmap para configurar toda la distribución de mi teclado:
setxkbmap -model pc105 -layout gb -variant intl -option caps:swapescape
Xmodmap
Si no quieres que el Esc se convierta en Bloq Mayús (y quedarte con dos Esc), puedes usar Xmodmap.
Añade estas líneas a un archivo (sugerencia:
~/.Xmodmap):remove Lock = Caps_Lock keysym Caps_Lock = EscapeEdita tu
.xinitrcpara aplicar la asignación cada vez que arranquesX11:xmodmap ~/.XmodmapEncontré este script en internet. También usa xmodmap, pero simplifica el activar y desactivar el Bloq Mayús:
#!/bin/sh case $1 in off) xmodmap -e "clear lock" xmodmap -e "keycode 0x42 = Escape" ;; on) xmodmap -e "keycode 0x42 = Caps_Lock" xmodmap -e "add lock = Caps_Lock" ;; *) echo "Uso: caps {on|off}, activa y desactiva el Bloq Mayús" echo "Cuando está desactivado funciona como la tecla Esc" ;; esac
Terminal
Un problema de las soluciones anteriores es que solo funcionan en X. Para intercambiar el Bloq
Mayús con el Esc en el terminal basta con ejecutar este comando:
julio@julio-acer ~> (echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -
Por comodidad, añade un alias a ~/.zshrc:
alias nocaps='(echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -'
Actualización
Hoy en día (2022) he encontrado la solución ideal: tener un teclado configurable.
Me compré un Moonlander Mark I y asigné el Bloq Mayús a la tecla a
la izquierda de la A.
Sin necesidad de ningún cambio por software.
Links

Soy un ingeniero informático brasileño radicado en Alemania, apasionado por la tecnología, la ciencia, la fotografía y los idiomas.
Llevo programando cerca de dos décadas, explorando desde apps móviles y desarrollo web hasta aprendizaje automático. Hoy me enfoco en SRE en la nube e ingeniería de datos.
Soy voluntario en las comunidades de open source y Python, ayudando a organizar PyCon DE y PyData Berlin, dando mentorías y contribuyendo con código y traducciones.
En mi blog comparto consejos de Linux, guías de configuración y notas personales que escribí como referencia futura. Espero que también sean útiles para otras personas. El contenido está disponible en varios idiomas.
Visita mi galería para ver algunas de mis fotografías.
Fuera del teclado, me encontrarás en conciertos, tocando el clarinete, en bicicleta, buceando o explorando nuevos lugares, culturas y cocinas.
¡Siempre feliz de conectar! 🙂