Hola Spacemacs
Hasta fines de 2011 usaba editores "comunes" para programar.
Durante mucho tiempo usé gedit tuneado hasta la manija. Me acuerdo que una de las mejor configuraciones que le había hecho era que desde el editor podía seleccionar una query SQL, tirársela a un MySQL y el resultado se renderizaba en una tabla dentro del propio gedit. Ni que hablar de habilitarle snippets y un montón más de chirimbolos útiles para programar.
Durante algún tiempo también usé kate, y también recontra tuneado.
A veces pienso que a esos dos editores pude sacarles más que el máximo de lo que podían dar. Es decir, son editores de textos súper simples que están pensados para editar algún que otro archivo y no mucho más. Sin embargo yo les sacaba mucho jugo.
En aquellos años había obviamente IDEs, pero eran monstruos que chupaban todos los recursos de la computadora (como ahora?). Vos podías usar Eclipse o NetBeans, pero te olvidabas de hacer más cosas con esa computadora. A pesar de que podías configurarlos y funcionaban con otros lenguajes, esos dos IDEs estaban pensados principalmente para desarrollar Java y yo por aquellos años laburaba con PHP.
A medida que vas avanzando como programador, como dice mi amigo Osiris, necesitás empezar a "afilar el hacha". No alcanza con seguir haciendo lo mismo, pero con más intensidad, para volverte más productivo. Hace falta mejorar o cambiar las herramientas que usás, y como decía, a gedit y a kate ya les había sacado todo el jugo posible. El camino era obvio: Tenía que cambiar de editor.
La Iglesia de Emacs o la secta de Vim
Había muchas alternativas, pero Vim y Emacs sobresalían por sobre el resto. Ambos eran altamente configurables y estaban a un apt-get install de distancia. Recuerdo que por aquellos años la mayoría de mis compañeros de trabajo usaban vim, con lo cual el camino de migración era fácil. Con ellos iba a poder tener todo el soporte necesario! Además de que más que usuarios de Vim, era Testigos de Jehová de Vim. Todos los sábados a la mañana salían a tocar timbre por el barrio para contar las bondades del editor de la bestia ;-P
Sin embargo, había algo de vim que no me cerraba, no sé, quizás era el hecho de que una vez que entrabas no podías salir (como toda buena secta) o que para empezar a escribir tenías apretar la tecla insert o que para seleccionar un fragmento de texto tenías que apretar Esc y luego la v para entrar a un modo "visual"... mucho kilombo la verdad.
Así que me decidí por emacs y en el verano del 2012 lo empecé a usar y me enamoré. Durante varios años fui agregando configuraciones útiles que iba descubriendo, pero llegó un momento allá por 2018 que el archivo .emacs.d/init.el (y su gestión) se empezó a volver inmanejable. Simultáneamente, empecé a notar que la forma en la cual yo agregaba paquetes a emacs, esto es bajando el tar.gz, descomprimiéndolo en el directorio .emacs.d/ y cargándolo a mano en init.el no era nada cool, la onda era usar use-package.
Entonces pensé: Por qué no re-escribo toda mi configuración usando use-package de una manera mucho más ordenada y la comparto para que otras personas la puedan usar?
Fue así que nació "The Pepe emacs config", un repo que contenía mis configuraciones preferidas y que al mismo tiempo le podía servir a otra gente. Me acuerdo que pasé muchas horas (días?) tuneando esa configuración. Usaba monokai mi theme preferido, tenía magit, flycheck, autocompletado con company, etc.


Todo concluye al fin
Al principio parece que no, pero mantener solo tu propia configuración de emacs es algo que lleva tiempo, bah en realidad creo que mantener la config de cualquier software que sea altamente customizable (programable en el caso de emacs) lleva tiempo. Sobre todo porque de vez en cuando querés agregar algún paquete nuevo y no siempre la configuración de ese paquete es tan simple o porque algún paquete que usás deja de estar mantenido, etc.
Entonces me pregunté:
¿Para qué mantener mi propia configuración si puedo usar alguna distribución de emacs como Spacemacs o Doom Emacs mantenida comunitariamente y agregarle solo mis "extras"?
Y así fue que decidí migrar todas mis configuraciones a una distribución comunitaria de Emacs. La verdad es que la decisión entre Spacemacs y Doom Emacs, fue fácil: Tiré la moneda al aire y cayó del lado de Spacemacs ;-P
Algo que me gusta mucho de Spacemacs es el concepto de layers y el hecho de que sean mantenidas comunitariamente.
Empecé a migrar los paquetes que uso habitualmente y mis configuraciones creando una pepe layer. Me parecía una buena alternativa y así lo hice. Luego de que terminé de hacerlo y todo "funcionaba" me dí cuenta que soy un gil, de esa forma lo único que hacía era replicar mis cosas sobre Spacemacs sin hacer uso de todo lo que ellos proveen. Así que borré todo y empecé de vuelta.
Esta vez fui viendo uno a uno los paquetes que yo uso y que layer la proveía. De esa manera fui activando uno a uno los layers necesarios.
Habilitar layers en Spacemacs es fácil, simplemente hay que agregarlo a la variable dotspacemacs-configuration-layers dentro del archivo ~/.spacemacs. En mi caso, los layes que activé son:
dotspacemacs-configuration-layers '(auto-completion cmake docker emacs-lisp git github-copilot helm javascript json lsp markdown multiple-cursors neotree org php (python :variables python-backend 'lsp python-lsp-server 'pyright) (spell-checking :variables spell-checking-enable-auto-dictionary t) syntax-checking (tabs :variables centaur-tabs-enable-ace-jump t centaur-tabs-adjust-buffer-order t centaur-tabs-show-navigation-buttons t centaur-tabs-set-bar 'under centaur-tabs-set-icons t) terraform (version-control :variables version-control-diff-side 'left) theming toml yaml)
Pero con sólamente activar layers no me alcanzaba, porque yo tenía definidos un montón de keybindings y funciones custom. ¿Dónde pongo todas esas cosas? Bueno, en Spacemacs el lugar para poner todas esas cosas en dentro de la función dotspacemacs/user-config que está definida también dentro del archivo ~/.spacemacs, así por ejemplo para definir una función que borre el contenido dentro de comillas o paréntesis y asignar esa función a una combinación de teclas tenés que hacer:
(defun dotspacemacs/user-config () (defun delete-inside-paired-delimiters () "Si el cursor está dentro de comillas, borra el contenido entre las comillas. Si no, borra el contenido dentro del bloque delimitado más cercano: (), {}, []." (interactive) (let ((ppss (syntax-ppss))) (cond ;; Si estamos dentro de una string (comillas) ((nth 3 ppss) (let ((start (save-excursion (goto-char (nth 8 ppss)) (forward-char) (point))) (end (save-excursion (goto-char (nth 8 ppss)) (forward-sexp) (backward-char) (point)))) (delete-region start end))) ;; Si estamos dentro de cualquier bloque: (), {}, [] ((nth 1 ppss) (let ((start (save-excursion (goto-char (nth 1 ppss)) (forward-char) (point))) (end (save-excursion (goto-char (nth 1 ppss)) (forward-sexp) (backward-char) (point)))) (delete-region start end))) ;; Si no estamos en un bloque ni comillas (t (message "No estás dentro de una cadena ni de un bloque delimitado."))))) (global-set-key (kbd "C-c d") #'delete-inside-paired-delimiters) )
De esta forma pude reemplazar la configuración compleja que tenía en mi Pepe Emacs Config con Spacemacs, un conjunto de layers y unas pocas configs extra.
Estoy contento ;-)









