Vim sin Esc

may 21, 2012·
Julio Batista Silva
Julio Batista Silva
· 4 min de lectura
blog Vim

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: movimiento
  • Alt+o: abre una línea nueva debajo de la posición actual
  • Alt+A: append al final de la línea actual
  • Alt+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.

  1. Añade estas líneas a un archivo (sugerencia: ~/.Xmodmap):

    remove Lock = Caps_Lock
    keysym Caps_Lock = Escape
    
  2. Edita tu .xinitrc para aplicar la asignación cada vez que arranques X11:

    xmodmap ~/.Xmodmap
    
  3. Encontré 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.


Julio Batista Silva
Autores
Senior Cloud Developer

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! 🙂

comments powered by Disqus