Todavía era media mañana. El discípulo se afanaba en corregir varios errores que su maestro había señalado en su código. En su pantalla de vim había varias ventanas abiertas con distintos archivos. La corrección le obligaba a cambiar no sólo de archivo, también debía saltar entre las funciones de un mismo objeto y sus distintos algoritmos. Se daba cuenta que pasaba mucho más tiempo buscando la línea de código concreta, buceando en algoritmos, que programando. Y en poco tiempo, empezó a destruir más código del que arreglaba.
Su paciencia se agotaba. Estaba a punto de golpear el teclado para desahogarse. Pero las enseñanzas de su maestro se impusieron. Había identificado el problema; en lugar de mejorar, su código empeoraba. Así que procedió como le habían enseñado. Se levantó, abandonó su ordenador, se sentó a la orilla del rio y se concentró en el sonido del agua.
En pocos minutos, el ritmo de la corriente absorbió su mente.
Cuando ya se tranquilizó. Noto que a su lado estaba sentado su maestro. Incapaz de precisar cuanto tiempo hacía que estaba allí, le confesó:
- "Maestro, no puedo concentrarme en el código. No puedo solucionar rápidamente los errores."
El Maestro, sin apartar su mirada de la corriente le contestó:"
- "¿Ves cómo vuela la mosca sobre el río? Se acerca a la superficie, vuelve a subir, vuela luego en círculos, baja, sube, gira... No hay orden. No tiene un objetivo, simplemente vuela."
El discípulo miraba incrédulo a su maestro. Pero ya sabía que era mejor esperar.
- "Pero la trucha." - continuó -"La trucha espera quieta en el agua, enfrentada a la corriente, centrada en su objetivo. Sabe lo que tiene que hacer. Espera, se enfoca y, cuando llega el momento, dobla rápidamente su cola y atrapa a la mosca con un movimiento fuerte, sencillo, certero."
Maestro y discípulo permanecieron en silencio.
- "¿Debo entonces mejorar mi concentración? ¿Hacerme más fuerte?" - preguntó el discípulo.
- "No" - le respondió - "Debes enfocar tu objetivo".
- "Maestro, ¿cómo lo haré?"
- "Como lo hace la trucha. Dobla tu código."
- "Pero Maestro, el doblado del código es muy lento. Me obliga a definir cada doblez y a introducir marcas de doblado que no son código. Son impuras y según las enseñanzas deben evitarse."
- "Como bien dices." - indicó el Maestro - "Todo lo que es ajeno al código debe evitarse. Igual que evitamos los comentarios haciendo que el código se explique a sí mismo podemos evitar las marcas de doblado."
- "¿Cómo Maestro? ¿Cómo haré para que el código..." - y dejó la pregunta en suspenso, empezaba a intuir la respuesta.
- "Quizás podría..."- continuó el discípulo - "utilizar alguna marca del código como marca de doblado. ¡Eso es! Debo utilizar alguna marca que represente las anidaciones. Y esa es... ¡la llave!"
El Maestro no dijo nada, simplemente sonrió.
Enseguida el discípulo puso en práctica su idea. Estableció como las marcas como método de doblado de código con el comando :set foldmethod=marker y estableció como marcas las llaves con el comando :set foldmarker={,} . De pronto, todo su código apareció perfectamente doblado ante sus ojos. Navegó por sus dobleces abriéndolos con zo (zopen) y cerrándolos con zc (zclose). Comprendió que, gracias al doblado, podía ver la estructura de sus objetos. Cada clase se doblaba con sus métodos, podía abrir una clase y ver la lista de métodos completa en pantalla, solo con el nombre. Y podía profundizar en cualquiera de ellos desdoblándolo, y así sucesivamente con sus algoritmos y bucles.
Se dio cuenta que con la llave como marca, el doblado era recursivo. Había dobleces dentro de dobleces, dentro de dobleces... y entendió la utilidad de los comandos zO (zOpenall) y zC (zCloseall) que le permitían abrir o cerrar todos los dobleces correspondientes a la línea con el cursor.
También podía abrir o cerrar todos los dobleces de un archivo con los comandos zR y zM. La potencia era infinita y podía centrarse rápidamente en la parte del código con la que deseaba trabajar sin perder la estructura de vista. Con esta potencia se haría mucho mejor programador.
Probó finalmente a buscar una expresión en el código doblado. Y utilizó el comando zv (zvercursor) para desdoblar el código hasta la línea buscada. Lo tenía todo.
El orgullo por su discípulo era evidente en la cara del Maestro.
"No olvides" - le advirtió - "que hay otros métodos de doblado que te permitirán enfocarte en otras situaciones. La llave es una buena marca para archivos de código. Pero con un lenguaje de marcas necesitarás cambiar de método. Utiliza :set foldmethod=syntax para archivos XML. Y si se trata de Python, quizás prefieras utilizar :set foldmethod=indent. Hay muchas opciones." concluyó.
"Maestro, ahora entiendo porque utilizamos la z. Representa el doblado del código. Es la representación más sencilla y la más completa."
El Maestro miró a su discípulo con cariño. "Ahora entiendes porqué vim es zen. Ya estás preparado."
Mientras el joven iniciaba el nuevo camino que le convertiría en un gran maestro del vim, su Maestro no pudo evitar una lágrima, de orgullo y pena al mismo tiempo.