Desde hace unos 2 años vengo usando Spacemacs como editor de texto para programar, escribir y más. Lo he mencionado varias veces en el blog particularmente en posts sobre Emacs, pero nunca escribí al respecto. Es un proyecto que me ha dado mucho y me gustaría compartir lo que he aprendido, y con suerte animar a alguien más a probar Spacemacs. Así que ¡hablemos de Spacemacs!

¿Qué es Spacemacs?

Spacemacs es una “distribución” de Emacs. Emacs es un editor de texto extensible y personalizable. Cada uno puede crear su propia “distribución” agregando funciones, paquetes y distintas configuraciones en archivos Elisp (Emacs Lisp), para que Emacs se comporte o se vea como uno prefiera. En sí Spacemacs es un conjunto de archivos elisp. Si bien hay varios kits de inicio de Emacs para mejorar su funcionamiento por defecto, Spacemacs es uno de los más populares. Se caracteriza entre otras cosas por tener un desarrollo comunitario de software libre bajo licencia GPLv3.

Cuando alguien tiene un problema en Spacemacs, no lo arregla sólo para su caso particular, la solución o nueva característica es compartida con el resto en el marco en común y opinionado que es Spacemacs. Es sumamente modular, no necesitamos usar TODO lo que nos provee, de hecho su perfil altamente configurable nos deja activar y desactivar cosas a medida que las precisamos. Y es muy personalizable.

Dedicada a los usuarios de Vim

Una característica fundamental de Spacemacs es que comenzó como una distribución basada en Evil, una capa extensible de vi para Emacs. Esta herramienta emula las características principales de Vim en Emacs. Gracias a Evil, podemos aprovechar lo bueno de Vim y lo bueno de Emacs combinado en un editor que provee lo mejor de ambos mundos. Ésta fue la razón principal por la que empezamos a usar Spacemacs en mi trabajo en su momento. Había usuarios de Emacs y usuarios de Vim, y con Spacemacs podíamos hacer pair programming en la máquina de cada uno en un entorno familiar. Si bien creo que soy el único que quedó usando Spacemacs, migré mis preferencias particulares de mi configuración de Emacs a Spacemacs y nunca volví atrás. Por más que no necesite usar Vim en mi Emacs, la distribución alcanzó ser mucho más que la combinación de Emacs con Vim.

¿Y qué tiene de bueno?

Viniendo de Emacs, una cosa que me encantaba era agregar funciones que me encontraba por ahí, configuraciones, paquetes nuevos y personalizaciones. En Spacemacs me siento más seguro de hacerlo al poder trabajar dentro en un “framework”. Y no es casualidad, Spacemacs se basa en varios principios:

Ergonomía – la forma de usar comandos y atajos está definida con la comodidad y salud de nuestros dedos y manos en mente. En lo personal no sé si exploto esta característica del todo porque no uso el modo Vim que tiene un modo de inserción de texto y otro de ejecución de comandos. Como uso modo Emacs, sigo apretando mucho Ctrl y Alt todo el tiempo 😛

Mnemotecnia – Los atajos de teclado están organizados con prefijos mnemónicos como b para buffer, p para proyecto, etc., por lo que son fáciles de aprender y recordar.

Visible – Visibilidad en tiempo real sobre los comandos y atajos de teclado disponible. Y teniendo una idea de cómo usarlo, es fácil encontrar y descubrir nuevas funcionalidades.

Consistencia – Dadas ciertas convenciones, funciones similares tienen los mismos atajos de teclado en todos lados. Por ejemplo el “ir a definición” de una clase o módulo sería el mismo atajo para Ruby que para Python, o algo así.

Una ventaja que ya tenía Emacs para mí, y se transporta a Spacemacs es que uso una sóla herramienta para todo. Puedo programar en Ruby, Elixir, editar archivos de configuración, ejecutar tests, compilar, usar Git, jugar Tetris, etc. Con el soporte para Language Server Protocol, se puede usar casi cualquier lenguaje de programación con las características de un IDE (auto-complete, documentación). Es un excelente punto de inicio para principiantes que quieran empezar a usar Emacs. En el fondo sigue siendo el mismo editor de texto que vengo usando hace años, y todo lo que se puede hacer en Emacs, se puede hacer en Spacemacs.

¿Cómo se usa?

Spacemacs nos permite acceder a modos comunes y herramientas disponibles en Emacs a través de unidades auto-contenidas que llama capas (“layers”). Éstas capas son paquetes de archivos de código elisp que incluyen configuraciones, atajos de teclado, funciones y otros paquetes. Un ejemplo es la capa ruby que incluye un montón de paquetes como rake, bundler, chruby, rvm, y más herramientas que nos ayudan a trabajar con el lenguaje de programación Ruby, y las integra sin tener que instalar cada una o configurarlas a mano. Generalmente podemos personalizar y configurar todo más a fondo, pero las convenciones son suficientemente buenas como para empezar a trabajar con una nueva capa sin mucho esfuerzo.

Es importante recordar que tanto Emacs como Spacemacs son editores de texto. Se usan para mucho más que programación. Varios autores lo usan para escribir. Un ejemplo famoso es Neal Stephenson, autor de Snow Crash, The Diamond Age, entre otros.

Por defecto, Spacemacs usa un archivo ~/.spacemacs para controlar qué capas cargar y personalizar todo. Dentro de este archivo hay varias funciones de Spacemacs donde podemos especificar y personalizar distintos aspectos. Es el archivo que nos conviene guardar bajo control de versiones para ir modificando y mejorando con el tiempo. Pueden leer más al respecto en la guía rápida. Pero si hay algo en particular de lo que les gustaría leer en español sobre Spacemacs, no duden en pedirlo en los comentarios de este post.

En mi caso, como empezamos compartiendo una configuración de Spacemacs, teníamos un archivo .spacemacs bajo control de versiones en un repositorio de la empresa. Y para mis configuraciones personales, escribí una capa personal. Escribí más al respecto en el blog de Cultivate (en inglés), pero en algún momento voy a traducir y actualizar ese post para publicarlo acá.

Cómo aprender a usar Spacemacs

Como mencioné al principio, Spacemacs está basado en Evil, que es un modo que nos permite usar la configuración de teclas de Vim. Es así que existen dos modos principales: Evil Mode (Vim) o Holy Mode (Emacs) y un modo híbrido. Otra característica fundamental de Spacemacs es la tecla líder. En el caso de Evil Mode es SPC y en Holy Mode Alt + M . Esto nos permite ejecutar varios comandos de Spacemacs mismo. La tecla también es modificable. Pero en la documentación siempre vamos a ver SPC para referirse a la tecla líder. Por ejemplo con SPC m ( Alt m m en Holy Mode), podemos encontrar todos los comandos del modo principal activado.

Y para hacer las cosas todavía más fáciles, Spacemacs incluye un tutorial propio, al que podemos acceder con SPC h Y para ingresar a un Vimtutor adaptado a Evil que también beneficiará a usuarios en modo Emacs.

Instalación de paquetes

Viniendo de Emacs, nos podemos ver tentados a instalar un paquete con package-install o desde el menú list-packages . Pero al reiniciar Spacemacs, los paquetes instalados “A la Emacs” se van a desinstalar por ser considerados “huérfanos”. Para gestionar los paquetes, tenemos que agregarlos al archivo .spacemacs , ya sea agregando una capa que lo use, o agregando un paquete en particular. Al iniciar Spacemacs, se va a fijar los paquetes que tiene que instalar o desinstalar basado en nuestra configuración.

master vs develop

Recomiendo usar la rama develop del repositorio Git, porque master se actualiza muy poco y el desarrollo periódico se va haciendo en develop. El último “release estable” fue en Enero de 2018, pero la rama master se mantiene actualizada con bugs (en teoría). Vengo usando develop casi desde un principio y no he tenido problemas. Pero teóricamente puede tener regresiones.

Conclusión

Gracias por leer hasta acá, espero haber despertado su interés por Spacemacs o que al menos lo tengan más presente como opción si no lo tenían ya. Mis archivos de configuración están compartidos en GitHub, por si quieren ver más. Aunque más adelante voy a contar un poco sobre lo que hay ahí en otro post.

Me gusta mucho seguir usando una herramienta tan extensible como Emacs desde hace años, siempre se aprende algo nuevo. En base a una pregunta en Twitter, veo que no soy el único que se queda con lo mismo. Hasta encontré más gente que usa Spacemacs 🙌🏻. Me interesa saber cómo otras personas usan su editor de texto preferido y qué les lleva a cambiar de uno a otro. Así que si tienen algún comentario al respecto, les agradezco lo compartan 🙂

Entiendo que mi relación con Emacs es un poco personal. Pero también le veo ventaja a aprender una sóla herramienta muy bien que después puedo seguir usando a pesar de cambiar de tecnología o lenguaje de programación. Ni que hablar no tener que volver a aprender atajos de teclado o procesos de trabajo con otro editor de texto. Pero todos somos distintos y siempre lo mejor es tener opciones (incluso con Emacs, cada persona puede tener un entorno sumamente personalizado). Además que cambiar de un editor a otro puede ser un desafío interesante y entretenido, además de darnos la habilidad de aprender nuevas herramientas. Y uno mismo va cambiando con el tiempo, lo que me sirve hoy puede no servirme mañana.

En fin, temas interesantes para charlar.

Les invito a probar Spacemacs, y cualquier duda que tengan pueden contactarme que prometo ayudar dentro de lo que pueda.

Post escrito con Spacemacs ✌️