Superpoder: conocer tus herramientas de desarrollo
No hay nada que VSCode no pueda hacer
¿Ha mejorado tu productividad?
¿Por qué te haces ese daño?
Esos son algunos de los comentarios más comunes que recibo cuando digo que estoy usando NeoVim. Estas frases también salieron de mi boca antes de embarcarme en esta travesía y no es difícil ver por qué. NeoVim es un editor de texto que se ve así apenas lo abres:
No es muy aesthetic de su parte. Además, cuando estamos tan consentidos por la cantidad de funcionalidades con las que viene desde el inicio VSCode, nos preguntamos: ¿Cómo abro un archivo? ¿Cómo escribo? ¿CÓMO SALGO? 💀
Además, requiere que aprendas a configurar tu entorno de Vim, manejar extensiones, aprender los keymaps o shortcuts y funciones de cada extensión, soltar el mouse, administrar un repositorio de archivos de configuración si es que trabajas en múltiples computadores… 🤯
Por eso, y como ya hay muchos tutoriales al respecto, voy a darte las principales razones por las que amo NeoVim, y tu también deberías 🤠.
1. Vim motions
¿Recuerdas que dije que parte de aprender Vim era “soltar el mouse”? No era broma. No te preocupes, puedes activar el mouse, yo lo tengo activado y me hizo la transición mucho más amigable, pero realmente no lo necesitas. Parar tu flujo de información al teclado para tener que mover tu mano al mouse y hacer algo que no debería ocupar tu RAM mental, es horrible.
Puede ser que esté exagerando al ser algo tan minúsculo, pero esto pasa tantas veces, y me he distraído tanto que creo que vale la pena arreglarlo. El flow al que se entra cuando estamos programando es muy preciado y difícil de conseguir, por eso deberíamos apuntar a quitar estas distracciones innecesarias.
Al principio pareciera que lo único que tienes para moverte en el código sin el mouse son tus flechas o h ⬅️ j ⬇️ k ⬆️ l ⬇️ (que llamaré teclas de movimientos de ahora en adelante), pero aquí es cuando vienen al rescate los Vim motions. Estos son combinaciones de teclas que, cuando ya están interiorizados, te permiten moverte mucho más rápido que cualquier mouse.
Partiendo con los números de linea relativos que se combinan con las teclas de movimiento para moverse verticalmente donde quieras, la idea de es que pienses muy poco sobre donde estás parado, el foco debería estar en lo que quieres hacer.
¿Estás en un variable y quieres ver la siguiente vez que se usa?
Aprieta “*”.
¿Estás en una llave que marca el principio de una función y quieres ir a la que lo termina?
Aprieta “%”.
Suena absurdo que haya una tecla para estos movimientos, pero al tenerlos interiorizados uno realmente vuela. Y solo recuerda el momento que viste a ese desarrollador senior genio, maestro de su oficio, volar en su editor de texto; tu podrías ser ese (solo te faltan los años de sabiduría, pero vamos un paso a la vez).
2. Macros
Después de aprender muchos Vim motions y como moverte rápidamente entre los distintos modos, vas a naturalmente llegar al deseo de repetir todos esos movimientos reiteradas veces. Es una pena que no exista nada para hacer algo así…
Obviamente Vim tiene algo para eso porque es hermoso. Imagínate que quieres cambiar una palabra en solo 10 iteraciones (tal vez porque solo quieres cambiarlo dentro de una función). Podrías hacer la combinación de teclas “viw*Nciw”, escribir lo que quieras y “<ESC>n” 10 veces. Si aún no estás acostumbrado a Vim no te preocupes por lo que significa cada keybinding, pero si quieres saber esto es lo que significa cada parte:
- “viw” para seleccionar la palabra que quieres
- Marcarla con “*N”
- Cambiarla con “ciw”, lo que te deja en “Insert mode” para escribir lo que quieras
- Sales del modo “Insert” con “ESC”
- Vas a la siguiente aparición de la palabra con “n”
Tal vez mi mente está distorsionada, pero hacer esto se siente como un juego y me encanta. De todas formas, hacer eso 10 veces puede ser algo tedioso.
Aquí es cuando llegan las macros a salvar el día e introducir un mundo gigante de posibilidades. Tan solo parte grabando la macro en algún registro como “a” (hay muchos tutoriales). Haz la misma serie de comandos que harías para una iteración, anda a la siguiente palabra, deja de grabar la macro, y finalmente córrela para las 9 palabras restantes con “9@a”. ¿Por alguna razón quieres volver a hacer lo mismo pero con 5 palabras que faltaron? Mientras no hayas reescrito el registro puedes lograrlo con “5@a”.
Esta es una forma de usar macros muy básica, pero creo que se entiende lo lejos que se puede llevar. Si no me crees mira este serie de videos de alguien resolviendo problemas típicos de programación, pero solo usando Vim.
3. Navegación de archivos
¿Qué es un IDE sin un árbol para explorar archivos? Vim.
En NeoVim también se puede tener un filetree y yo lo sigo encontrando bastante útil para ver archivos cercanos, crearlos, moverlos y borrarlos. Aún así hay bastante gente que usa Vim que ni siquiera lo tiene instalado, porque hay otras extensiones más eficientes como telescope (que es enormemente expandible). No es necesario saber toda la ruta de un archivo para ir a modificarlo. En vez de ir desenterrando carpetas para llegar a “src/soy/un/archivo/en/una/capa/muy/abajo.rb”, solo busca en telescope “muy/abajo.rb” y abre el archivo.
Hay varias formas de navegación eficiente en Vim. ¿No te acuerdas del nombre del archivo pero sí de la función? Haz un live grep en telescope y encuentra todas las coincidencias. ¿Quieres ir a la definición de una función en typescript? Instala el Language Server Protocol (LSP) del lenguaje y vuela entre archivos saltando de una definición a otra. ¿Necesitas ver un archivo mientras editas otro? Haz un vsplit con el keybinding que tengas configurado y muévete entre las ventanas con CTRL + las teclas de movimiento.
Mi flujo de trabajo cambió drásticamente cuando empecé a usar Vim y definitivamente me hizo cuestionarme cosas que yo como desarrollador daba por sentado que necesitaba, pero me hacían más lento. El explorador de archivos fue uno de esos.
4. Vim te obliga a saber
Hasta este punto del blog ya he dicho muchos términos que no tenía idea lo que eran antes de usar Vim. ¿Por qué sabría qué LSP usa typescript? o siquiera ¿Qué es un LSP? Si hay una extensión que se ocupa de todos los temas de lenguaje en VSCode.
Y en efecto, si partes usando NeoVim sin ninguna distribución: suerte intentando usar una extensión que no entiendes, o más difícil aún, personalizarla. Estás casi obligado a aprender qué hace cada extensión y cómo funciona en grandes rasgos. Hasta tienes que aprender Lua (si es qué no lo sabes) para instalar y personalizar una extensión.
Qué tan bien utilizas Vim depende de tu conocimiento y habilidad, lo que te obliga a mejorar en muchas áreas de la computación en las que tal vez antes no tenías ningún interés. Te hace saber más y finalmente ser un mejor profesional. En mi opinión calza con la mentalidad casi obsesiva que se tiene como Ingeniero de Software de aprender lo necesario para solucionar lo que toque.
4. Extensiones para cosas tediosas
Me ha pasado mucho que la gente no sabe que Vim tiene extensiones, lo que es muy chistoso cuando sabes la cantidad absurda que debe haber. Uno parte con extensiones normales como un wrapper de Git pero en Vim, a una extensión que te deja cambiar de snake case a camel case. El otro día estaba cansado de que cuando tenía un archivo abierto, como los monitores de la oficina son gigantes, el texto quedaba muy a la izquierda, por lo que instalé no-neck-pain.
Tampoco podría vivir sin la extensión para maximizar una ventana por completo, o una para cambiar, eliminar o agregar surroundings. Yo sé que estas extensiones suenan absurdas, pero solucionan un problema que ocurre tantas veces, que amo cada una de ellas.
5. Queriendo que todo sea como Vim
Escribí este blog en Notion, y no puedo enfatizar suficientemente cuanto traté de usar inconscientemente motions de Vim, fallando estrepitosamente. Los de la oficina saben cuánto quiero un browser que sea como Vim y no quieren saber lo feliz que sería si Slack también tuviera ese sistema.
Tal vez es por qué ya usé mucho tiempo aprendiendo los “shortcuts” de Vim, pero creo que habla muy bien de un software que partió hace tanto. El sistema en mi opinión es muy bueno, y si no te gusta puedes editarlo hasta que quede como quieras.
Todo era mentira, sigue usando VSCode
Vim es hermoso, pero no lo necesitas. En Fintoc me ha tocado hablar con mucha gente que usa VSCode y sabe usarlo impecablemente. Saben todos los shortcuts, cómo usar el debugger a su máximo potencial, conocen todas las extensiones que usan. Y es ahí donde realmente está la clave: conocer tus herramientas de trabajo te da superpoderes.
A mi me sigue gustando más Vim, me siento veloz y me ha hecho aprender mucho, además de que logró que me volviera a obsesionar con programar, pero si a ti te encanta VSCode, te mueves rápido, te gusta, y tienes un computador con mucho RAM 😜 adelante.