Caía la tarde. El discípulo había estado practicando todo el día su último koan aprendido. Ahora podía desplazarse por su código utilizando las teclas h, j, k y l. Había adquirido destreza y lo hacía con rapidez.
A su lado, su maestro programaba. La paz se reflejaba en su rostro y sus dedos apenas se movían, simplemente leves pulsaciones sobre las teclas y ligeros desplazamientos. Sus muñecas, siempre sobre el teclado, reposando.
El discípulo, orgulloso de su progreso y cansado por el largo día de práctica, se levantó para ver la pantalla de su maestro. Pero lo que vio le demudó el rostro.
Su maestro reflejaba paz y quietud. Su rostro relajado, la mirada fija, la columna erguida. Sólo en sus dedos había algo de movimiento, un movimiento suave, relajado... Pero en su pantalla se reflejaba otra cosa. Era velocidad pura. El cursor saltaba de un punto a otro del texto. Los bloques visuales se marcaban en un instante para, inmediatamente después, aparecer en puntos recónditos del texto o incluso en otros ficheros. En cuestión de segundos decenas de ficheros eran modificados con ágiles macros... Y todo con la más absoluta calma.
Sin apenas alterarse y desde luego sin que se apreciara ninguna reducción en el ritmo de programación, el maestro se dirijió a su discípulo: "¿Ha sido un buen día?".
Él, todavía absorto en los rápidos cambios de la pantalla de su maestro respondió: "Sí, muy bueno. Ya domino el koan h, j, k y l". Pero se sintió incapaz de contenerse - "Maestro, disculpad. Hoy he creído que era rápido. Pero viendo vuestro Vim me he vuelto a sentir como una tortuga. Por favor Maestro, ¿podéis iluminarme?".
Con un rápido gesto el maestro guardó los cambios de todos sus ficheros. Se volvió y miró a su discípulo.
- "El camino de Vim es largo, y en ocasiones difícil. Pero verás que cada día que practicas mejoras un poco. Hoy has aprendido mucho, dominas el koan h, j, k y l. Pero hay más, mucho más".
- "Maestro por favor, ¡enseñadme!" - suplicó el discípulo.
- "Por supuesto. Voy a hablarte de otro koan. Un koan difícil, pero potente. Es el koan g."
"El koan g significa movimiento. En inglés g significa 'go'. Al decir g, estamos diciendo a Vim que vaya. Así, '45gg' hará que el cursor se sitúe al principio de la línea 45. Estamos diciendo: '45, go,go!'"
"Si simplemente le dices a Vim gg ('go,go!'), él se desplazará al principio de la primera línea del fichero. Si lo que quieres es ir a la última línea, la mayor del fichero, tendrás que decirle G."
El discípulo seguía atentamente las explicaciones de su maestro, imaginando como podría utilizar este nuevo koan para colocarse en las líneas de su código indicadas por la salida de depuradores.
- "Pero no siempre queremos ir a un número de línea" - siguió el maestro - "Si quieres desplazarte a un fichero cuyo nombre esté escrito en el texto, Vim te lo facilita. El comando gf ('go file') te trasladará al fichero indicado bajo el cursor. Y en el caso de ser una URL, Vim te mostrará el código fuente generado."
El discípulo se estremecía imaginando la agilidad que los nuevos conocimientos aportaría a su Vim.
"Ya sabes desplazarte varias líneas o caracteres de una sola vez (5k, 10j, 4l, 3h...)", siguió el anciano, "pero, ¿y si quieres desplarte 3 palabras a la derecha? No vas a estar contando los caracteres. Para eso están w y b. w ('word' en inglés) te desplazará palabras hacia delante y b ('backwards' en inglés) te desplazará hacia atrás. Así 8w te desplzará 8 palabras hacia delante".
- "Pero Maestro" - protestó el discípulo - "¿Qué tienen que ver esos comandos con el koan g?"
El maestro le contempló con dulzura - "La verdad no siempre es evidente", le dijo. "A veces el camino para alcanzarla parece tortuoso. No lo es. Es nuestra ignorancia quien nos lo oculta. Si lo piensas te resultará evidente. g es un comando de movimiento, pero no siempre es necesario decirle a Vim todo lo que queremos. Debes buscar las formas más efectivas de comunicarnos con nuestro Vim. Por ejemplo, ¿recuerdas las expresiones regulares que estudiaste de niño?"
- "Sí Maestro", reconoció el discípulo.
- "Pués ya sabrás donde te llevarán los comandos ^ y $"
El muchacho dudó en su respuesta. "¿Al principio y al final de la línea?" contestó inseguro.
- "¡Naturalmente!", respondió su maestro. "Y no sólo eso, Vim también es capaz de trasladarte por el código con inteligencia, leyendo su camino en el propio código. Así, con los comandos * y # Vim leerá la palabra bajo el cursor y buscará su siguiente o anterior coincidencia. Y debes conocer también el comando % que te llevará al paréntesis, llave, marca o incluso estructura de control coincidente con el que se encuentre bajo el cursor. Es un comando muy potente, sobre todo si tienes el plugin matchit en tu Vim. Te ayudará a encontrar errores sintácticos en tu código."
- "Y hoy te enseñaré una última cosa. No sólo es importante ir, también es importante saber para qué vamos"
El maestro calló, y el joven discípulo temió que su lección del día hubiera terminado.
- "Maestro, no llego a comprender lo que me queréis decir"
- "Pues que Vim no sería rápido si requiriera dos comandos para una única acción. Así, si tu mente quiere ir al final de una línea para añadir texto, se trata de una única acción en tu espíritu y debe ser ejecutada con un único comando, A. Uno para cada uno", sentenció el maestro.
- "Maestro, ¿y si lo que quiero es ir al principio de la línea para insertar texto?", preguntó el discípulo.
- "No todo el conocimiento se adquiere escuchando. El verdadero conocimiento reside en la práctica. Practica ahora y encuentra el comando que necesita tu espíritu".
A pesar del cansancio que acumulaba, el discípulo siguió practicando las nuevas enseñanzas todas la noche. Incluso en la profunda oscuridad pudo encontrar el comando que buscaba. Y mientras practicaba los comandos gg, G, gf, ^, $, *, #, %, A e I se repetía a sí mismo:
"Maestro, Vim es rápido."