Vim/Teclado español

Afrontémoslo: la disposición del mapa de teclado español es una porquería. Sí, el castellano tiene la eñe, y las vocales pueden necesitar puntuación como la tilde o la diéresis. Nos hace falta un signo de apertura para la interrogación y la admiración, y seguramente muchos españoles también tengan cierta proximidad con otros idiomas latinos como el catalán, el francés o el italiano, así que estaría bien disponer con cierta facilidad de la ce con cedilla, el acento abierto, y el circunflejo. Además está la curiosa tradición orto-tipográfica de usar una letra volada sobre un número para indicar los ordinales (1º, 2ª, etc.).

Así que es cierto, acomodar en un teclado un mecanismo para producir tantos caracteres que el inglés no tiene, es una tarea difícil. A pesar de eso, el teclado español difiere del inglés en maneras absurdas (la que más me irrita es que el cierre de paréntesis en el teclado español es la apertura en el inglés). Y lo peor de todo es que caracteres muy usados en la programación o en los lenguajes de marcado requieren con frecuencia de llaves y corchetes, y dichos símbolos solo se producen en el teclado español con combinaciones de teclas que obligan a desplazar los dedos de su lugar natural al mecanografiar.

En Vim las llaves y los corchetes se utilizan para movimientos extremadamente útiles. Y si le añadimos una extensión como unimpaired de Tim Pope (que extiende los corchetes de forma elegante, bien pensada y muy de acuerdo al diseño de Vim), concluimos que se impone una solución para hacer dichos caracteres fácilmente accesibles en el teclado español.

Hay otros detalles interesantes, así que pasamos a considerarlos uno por uno.

Uso de marcas
Las marcas son muy útiles en Vim, especialmente porque además de que se pueden fijar manualmente, también hay algunas marcas automáticas. Si alguna vez te has preguntado como se actúa sobre el texto seleccionado en modo visual cuando se utiliza el modo ex, la respuesta es mediante marcas: de hecho, posiblemente hayas advertido que si pulsas los dos puntos con una selección hecha en modo visual, tras los dos puntos aparece el rango '<,'>. Si le añadimos que las marcas se pueden usar en acciones de edición (por ejemplo, copiar desde el cursor hasta una marca, o aumentar el sangrado desde una marca hasta otra), aún mejor.

El problema es que para saltar a una marca hay que usar el carácter backtick o acento grave (`), seguido del carácter que identifica a la marca. Pero si pulsamos dicha tecla en modo normal una vez no pasa nada. Vim no ve ninguna pulsación, ya que el sistema espera a que la próxima pulsación sea del carácter sobre el que debe posar la tilde, y enviar a la aplicación el carácter compuesto. Esto en Vim tiene un efecto inocuo, ya que habitualmente en el modo normal del editor la pulsación del carácter à (por ejemplo) no hace nada. Lo que queremos decir y lo que debemos teclear para indicar «la marca “a”» es `a.

Hay una manera de solucionarlo no demasiado complicada: dos pulsaciones sobre la tecla del acento y el sistema entiende que queremos ese acento por sí solo, y luego pulsamos el carácter correspondiente a la marca que queramos indicar. Pero es algo ineficiente, especialmente porque es muy habitual querer saltar a una marca que Vim establece automáticamente llamada ``, lo que requiere de cuatro pulsaciones consecutivas (ni una más ni una menos).

Afortunadamente hay una solución mejor. El apóstrofo (') hace casi la misma función que el acento grave (`), ya que también salta a una marca, pero ignora la columna (siempre va a la primera) y obedece solo a la línea. Afortunadamente podemos intercambiar ambas funcionalidades muy fácilmente:

nnoremap ' ` nnoremap ` '

Por supuesto podemos seguir escribiendo con total normalidad, ya que el mapeo tan solo tiene efecto en modo normal. En modo inserción nada ha cambiado. Podemos seguir escribiendo texto en italiano o catalán sin aprender una manera especial de teclear caracteres con acentos abiertos.

Ahora podemos teclear fácil, rápida y ágilmente la combinación '', que nos devolverá a la posición de partida antes del último salto (por ejemplo, para volver atrás después de ejecutar gg o G), y otras marcas.