Vim is awesome, dude
Quería hablaros hoy de Vim y cómo se ha convertido en una de las aplicaciones que más uso para multitud de tareas. Alguien que lo haya probado y haya sucumbido ante su complejidad y su curva de aprendizaje endiabladamente empinada, dejará de leer en este momento (considerando, claro, que este blog todavía lo lea alguien a parte de mí). Y vaya yo le diría que se equivoca en no seguir leyendo y se equivoca en no darle una segunda oportunidad a Vim, porque yo era uno de los suyos, de los que pensaba que alguien que usase Vim sólo podía ser alguien muy técnico o muy friki y que no merecía la pena darle una segunda oportunidad.
Y os digo sin miedo y con rotundidad del que ha probado y ha visto mundo que estamos delante de probablemente la mejor herramienta jamás creada para editar textos y trozos de código, y además por múltiples razones. Acompañadme en este viaje a los confines del frikismo editorial. Por cierto ¡qué post tan meta! (efectivamente estoy usando Vim para escribirlo, claro).
Primero un poco del por qué digo esto de que es de lo mejor para editar textos. A ver, lo primero que te encuentras es una pared: para empezar siquiera a usarlo, debes invertir bastante tiempo en leer cómo usarlo. Y eso hace que uno se desespere y además piense: no sé qué hago aquí si con Atom o con VSCode o con Sublime o con cualquier otro editor, es abrirlo y todo se hace según los cánones establecidos. Y voy a pararme en esta frase. Que algo funcione distinto, tampoco tiene que ser malo ¿verdad? Y si no oye no estaría escribiendo en Colemak por ejemplo y contento de haber hecho esa transición. Bien, pues lo primero es como con la transición de layout de Qwerty a Colemak, ¿te sientes bien en Qwerty? Oye fenomenal, ¿estás dispuesto a probar otra cosa para ver si te funciona mejor? Pues ánimo y al lío, y si descubres que no es para ti, y que estás supercómodo en Qwerty o usando tu editor de textos de toda la vida como Notepad++ o el que sea que se adapte mejor a tu workflow, yo no te voy a decir que cambies, pero sí te voy a decir que en mi caso el cambio ha valido muchísimo la pena.
En mi caso yo probé Vim hace tiempo, muuucho tiempo, en mi época de consultor y bueno, más por obligación, porque tenía que editar algo en una sesión en unix, y luego vamos, descartándolo casi de inmediato por su complejidad. En otras ocasiones lo había usado por consola para editar algo rápidamente desde la línea de comandos (en mis épocas algunos servidores remotos en AIX y otros derivados de unix me encontré). En Mac, hace algún tiempo me instalé MacVim (que es una especie de GUI para el vim que tengas instalado) y decidí darle una oportunidad. También lo hice porque tiene una comunidad de seguidores muy grande, y que todos dicen que va tan bien. Y además, como con el cliente de correo u otras herramientas de uso diario, uno siempre va en busca del santo grial, una herramienta de trabajo que se le ajuste como un guante, le consuma pocos recursos y le permita adaptarla a la perfección con su flujo de trabajo.
Y tras probar Vim yo siempre volví a Atom, en su día volví a Notepad++ cuando usaba Windows (han pasado años), volví incluso a alternativas mucho más sencillas como TextEdit en Mac o al Bloc de Notas en Windows para editar archivos de texto sencillos. Pensé esto de Vim, no es para mí. Y volví a esas aplicaciones porque ahí hay seguridad, opciones limitadas, atajos comunes del sistema. Ahí hay calma, sosiego, incluso por qué no, modernidad, UIs vistosas, y como decía se gobiernan por unos cánones. Entonces, ¿por qué voy a usar algo que es complicadísimo si con lo que tengo ya me vale? Matarse a aprender algo así como Vim habiendo alternativas muy buenas para editar textos y picar código en un momento puntual es bastante absurdo, ¿o no?.
Pues resulta que según cómo lo mires no. Lo primero, definamos qué le pedimos a un editor de textos y luego también pensemos si hay herramientas específicas para ello, y estoy pensando en los IDE (herramientas como Xcode que están pensadas para el desarrollo). ¿Cumplen esas herramientas todos nuestros objetivos? Si la respuesta es sí, no hace falta cambiar o invertir en Vim, a no ser que quieras ver si Vim satisface aquello que te falta en esas herramientas. Si ya estamos satisfechos con las posibilidades que nos ofrecen, plantearse un cambio, y más un cambio a una herramienta mucho más compleja y que cuesta aprender yo creo que no vale la pena. Es así, si uno ya está contento con Sublime, Atom, VSCode, o el editor de Python que se tercie y los conoce al dedillo, o bien tiene por costumbre abrirse un IDE como Visual Studio o como los que tiene Jetbrains para multitud de lenguajes, pues oye yo creo y quizás pueda equivocarme, que Vim poco le va a aportar a su día a día porque abandonar esas herramientas para irse a la consola y a un editor como Vim, pienso que es una aventura, pero no sé muy bien qué gana con el cambio (¿quizás rendimiento si esos IDEs consumen muchos recursos o son muy costosos de configurar?), interpreto que más bien poco. Yo os puedo hablar de mi experiencia con editores de texto y de mi caso de uso particular, que no tiene porque ser el de la mayoría, y esto va de contar las cosas en primera persona (por si después de tanto tiempo alguien se ha perdido).
Os cuento mi caso
En primer lugar, yo uso editores de texto para dos cosas principalmente:
-
Editar textos y notas, principalmente usando Markdown (y aquí incluyo escribir posts como este para mi blog que migré a jekyll hace algún tiempo). También os digo que de un tiempo a esta parte lo uso para tomar notas de algunas reuniones y de cosas que tengo que diseñar o desarrollar luego y como guía de notas o como “acta” de una reunión pues anotarlo en markdown en un archivo y tenerlos agrupaditos, funciona bastante bien.
-
Editar pequeños trozos de código / proyectos sencillos (normalmente en temas web y bbdd: HTML, JS, CSS, SQL). En mi trabajo, desde hace muchos años ya no desarrollo, es decir, mi actividad principal no va de desarrollar, pero siempre he tenido ¿buena? mano para el código, y bueno a veces para probar cositas sencillas, instalarse el código de producción en tu máquina y tener un entorno local, bueno, siempre intento tirar por ahí para probar cosas nuevas y experimentar.
Estaremos de acuerdo que para estos casos, cualquier alternativa es buena. Incluso hay herramientas como MacDown o IAWriter que te permiten tener previsualización del Markdown, y hay otras como pueden ser Atom o VSCode que llevan ya linters/coloreado de syntaxis de código, están orientadas al trabajo por proyectos, se integran a la perfección con git, y en fin, qué os voy a contar, llevan ya de saque múltiples opciones que satisfacen esos dos casos de uso con creces y con muy poco esfuerzo y un par de plugins, uno está en su salsa y tiene muy pocos quebraderos de cabeza. Atom (un editor que salió hace algún tiempo de la plataforma github) es un muy buen ejemplo de editor superversátil, y tiene tantos plugins y themes, que no te los acabas. VSCode es otra opción increíblemente buena para el punto 2 y que tiene muchos seguidores. Entonces, vayamos al quid de la cuestión: ¿por qué dejarlas de lado y abrazar Vim? Pues porque Vim de entrada y objetivamente, permite un control muchísimo mayor sobre lo que estás escribiendo, una vez entras en su rollo, es terriblemente eficiente. De hecho, hay multitud de plugins para Atom y VSCode que intentan emular vim, o emular sus modos de funcionamiento. ¿Sorprendidos? pues ahí está el meollo, ahí está el quid de la cuestión. Entender cómo funciona o porqué tengo que tocar i para escribir texto o pulsar Esc y :wq para guardar y salir.
Primero hay que romper el ¿esto cómo funciona? y especialmente ¿por qué funciona así? Y una vez lo descubres, te das cuenta de que Vim es increíblemente preciso y el editor de textos más versátil que puedas imaginar. Con una cantidad de plugins y de configuración que es enorme, tan grande y basta que es difícil de explicar. Puedes llegar a configurarlo de la forma que quieras, desde lo más sencillo y simple a lo más complejo. Y los atajos de teclado que usa son aberrantemente funcionales cuando descubres cómo usarlos en tu beneficio. Vim tiene una gramática, una manera de usarlo que te permite usarlo a tu antojo de mil maneras distintas, unas más eficientes que otras, todo hay que decirlo y no se aprende de la noche a la mañana.
Cómo se adapta Vim a mi caso de uso
Bueno pues para lo primero, vim cuenta de saque con coloreados de syntaxis que soportan markdown y muchos más lenguajes. Pero lo bueno no es eso, lo bueno de vim es que no funciona igual que un editor de texto tradicional pero MacVim le acerca a la experiencia de uso de un editor tradicional añadiéndole una capa de atajos y uso común. Por ejemplo, puedes seleccionar texto con el ratón (sacrilegio para algunos vimers), puedes guardar un arhcivo, un texto con Cmd+S, o hacer Cmd+T par ir a un nuevo tab por ejemplo. De alguna forma, acercan Vim a lo que uno está más acostumbrado. Sin embargo, Cuando dominas un poco más te das cuenta de que bueno teniendo buffers igual los tabs, pues oye, tampoco son tan importantes o que para guardar un texto puede irte mejor otro atajo.
Y esto de los atajos de teclado es importante. Por ejemplo la selección de texto o el poder trabajar con dos archivos al mismo tiempo se puede conseguir muy fácilmente en vim sin despegar tus manos del teclado, sin usar el ratón para nada.
Pongo un ejemplo de lo más sencillo. Quiero ir 3 párrafos más arriba de donde estoy escribiendo. En un editor cualquiera, con el ratón puedo ir hasta ahí clicar y mover el cursor hasta esa posición, o puedo también moverme pulsando Alt+flechas (3 veces) o bien con vim puedo pulsar { tres veces o con 3{ estando en modo normal. Ya pero debes recodar ese atajo. Y no lo negaré, eso es complicao, se aprende con el tiempo. Por eso MacVim en ocasiones funciona de maravilla cuando no recuerdas qué debes de pulsar o mejor dicho, cual es el atajo óptimo que te lleva a conseguir tu resultado esperado, pero puedes seguir con tu vida y ya lo aprenderás porque es cierto que cuando entras en esa espiral, es difícil parar. En vim tienes multitud de opciones para conseguir un determinado objetivo, algunas más buenas que otras.
Y ese es un ejemplo muy tonto, pero en vim tienes de todo y lo mejor de todo: lo puedes personalizar a tu gusto. Hay un archivo de configuración que es la pera y unos plugins que ayudarán a que usar vim se adapte mucho más a lo que estás buscando. Hago un repaso por cosas que tiene de saqué: marcado de sintaxis, corrección ortográfica, trabajar con múltiples archivos, buscador de texto, buscador de archivos, es que Vim tiene todo eso y más, consume poquísimos recursos y es brillantemente estético en la aplicación de temas visuales y esquemas de color.
Cómo lo pruebo?
Esto es lo más sencillo porque vim existe en múltiples versiones y para todas las plataformas. Yo, en macos, me instalé VimBox que es un conjunto de herramientas y plugins y que ya tocan de saque el archivo de configuración y luego a partir de ahí lo adapté para mí. Hay otras alternativas ya más completas como Spacevim que cuenta con multitud de seguidores. Y si estás en Mac (o en Windows estoy seguro de que hay alternativas similares) yo me instalé MacVim. Y a partir de ahí, ver tutoriales, seguir cuentas en twitter para aprender atajos como Learn Vim y adaptarlo a vuestro gusto.
Hay multitud de gente que publica su configuración en github, sus “dotfiles” y yo he ido picando un poco de aquí y un poco de allí. Yo he ido tuneando un poco ese vim y luego con las lecciones aprendidas he adaptado también neovim que es como una evolución de vim y que quizás dé para otro post. Mi configuración ha evolucionado de MacVim (básico sin nada, con vim a pelo), luego instalé VimBox y experimenté un poco con los plugins principales que lleva (desinstalé mogollón que no me servían de nada) y las configuraciones más básicas y más avanzadas, y este vim ya adaptado lo mantengo y todavía lo uso. Y además tengo neovim, con el que estoy escribiendo esto y que lo he adaptado totalmente con las lecciones aprendidas de vim. Uso dracula como theme.
Resumen TL;DR
Vim es una herramienta tremenda para editar textos y tocar código. Ocupa poquísimos recursos y sus posibilidades de configuración son infinitas. No vale para todo el mundo, y tiene una curva de aprendizaje muy empinada. Hay mucha documentación y ayudas para que entrar en su uso no sea un calvario. Creo que merece mucho la pena darle una oportunidad.