Cómo empezar con Emacs: Distribuciones
Publicado el Lunes, 5 de octubre de 2020Un hecho de empezar a usar Emacs es que la experiencia inicial para quienes lo prueban por primera vez puede ser un poco intimidante. Ha habido algo de discusión recientemente sobre si las opciones por defecto son suficentemente amigables o esperadas, y que Emacs debería incluir algunas configuraciones y paquetes por defecto que hagan una mejor experiencia. Si bien esta discusión sigue su camino, hay una alternativa: distribuciones.
Las distribuciones de Emacs se pueden comparar con las distribuciones GNU/Linux. Son conjuntos de scripts, paquetes y configuraciones que podemos usar en nuestro perfil para tener una experiencia de usuario predeterminada por dicha distribución. Esto es posible gracias a que Emacs es sumamente extensible, por lo que incluso usando estas distribuciones, siempre va a ser posible agregar nuestras preferencias personales.
Cuando Emacs inicia, intenta cargar un programa Lisp de un archivo de inicialización (o archivos init). Generalmente se usa ~/.emacs.d/init.el
o el directorio ~/.emacs
. En esta inicialización, podemos definir un montón de configuraciones visuales y de comportamiento, así como paquetes que queremos instalar, funciones que hayamos escrito en elisp, modos a habilitar/deshabilitar (cómo y cuándo), atajos de teclado y más. Estas distribuciones proveen archivos init que definen un comportamiento específico en Emacs.
Si tenemos más tiempo de aprender cuando comenzamos con Emacs, una buena práctica es empezar con un archivo vacío e ir agregando cosas hasta conseguir una configuración que nos gusta. Esto es un proceso sin fin, y una de las cosas que lo hacen genial (y a veces un vicio). Cuando necesitamos una funcionalidad específica, o vemos una característica de otro editor que nos gustaría poder usar en Emacs, generalmente encontramos un paquete o script para agregar a nuestra configuración personal. En mi caso empecé así, y mantuve una configuración por un buen tiempo: emacs-config.
En el blog mencioné también hace un tiempo Emacs Bootstrap, un sitio que te permite generar entornos de desarrollo en Emacs para distintos lenguajes de programación. Esto puede servir como base para iniciar un nuevo entorno de configuración personal.
Con el tiempo terminé usando una distribución, Spacemacs. Pero siempre ando observando lo que hacen otras distribuciones, y no descarto en algún momento volver a una configuración nueva de Emacs. Algo a aclarar es que ya sea usando Emacs desde cero o una distribución, vamos a tener que leer documentación, probar cosas, investigar, etc. Es una inversión a largo plazo que vale la pena. La extensibilidad y personalización que provee Emacs hace que terminemos convirtiéndolo en una herramienta de trabajo personalmente adaptada a nuestras necesidades. Y es un camino de ida, que no sé si termina... Pero genera mucha comodidad a la hora de trabajar con el editor de texto y un poco de satisfacción el tener tanto control sobre la herramienta.
Veamos algunas de las opciones de distribuciones para Emacs:
Spacemacs
Spacemacs es la distribución de la que más puedo hablar porque es la que vengo usando desde hace unos años. Empecé por necesidad, en el trabajo hacíamos mucho pair programming entre usuarios de Emacs y Vim. Y uno de los puntos fuertes de Spacemacs es que une ambos mundos en un mismo editor. A través de evil-mode
, implementa los atajos de teclado y otras características adicionales de Vim. Y se puede cambiar de un modo a otro (Vim/Emacs) con un sólo comando.
También organiza los atajos de teclado con prefijos mnemotécnicos y lo que llaman "leading key", en modo vim la tecla de espacio inicia el modo "spacemacs" que nos provee un montón de funciones y un buffer navegable para descubrir distintos comportamientos (en modo Emacs creo que es configurable, en mi caso uso Alt + M
). Por ejemplo las acciones relacionadas al Buffer se enlazan a la tecla b
, Proyectos a la tecla p
, y demás (las letras se corresponden con las palabras en inglés). Es muy fácil encontrar comandos gracias al autocompletado y búsqueda, y en general tiene un sistema consistente de hacer las cosas. Spacemacs cambia bastante el comportamiento de Emacs, aunque en el fondo sigue siendo estando ahí.
Para la instalación, Spacemacs clona el código del proyecto al directorio .emacs.d
, y agrega un archivo .spacemacs
donde podemos definir nuestras preferencias. Una recomendación si prueban Spacemacs, es usar la rama develop
, y no la rama por defecto, ya que está mucho más al día con cosas nuevas, se actualiza más seguido y es bastante estable.
Trabajando con una configuración compartida, eventualmente creé una capa privada personal. En Spacemacs las capas son paquetes de código bajo un formato estándar que agregan funcionalidad. Por ejemplo las herramientas necesarias para cada lenguaje de programación están definidas en capas. Cuando terminé siendo el único que usaba la configuración "compartida", me di cuenta que de repente era mejor mover mis configuraciones de la capa al archivo .spacemacs
. Pero con la capa personal de última tengo todo separado de la misma manera que Spacemacs organiza sus capas, así que es relativamente fácil de mantener. Pueden ver mis archivos de configuración para Spacemacs en este repositorio.
Es una buena distribución de arranque. Incluye de todo, pero podemos ir ajustando la configuración personal a nuestras necesidades. Especialmente recomendada para personas que vienen de usar Vim y tienen ganas de probar Emacs.
Doom Emacs
Doom Emacs surgió como archivo de configuración personal de un vimmer que se pasó a Emacs. Se denomina como un framework de configuración, otra forma de llamar una distribución, para usuarios que quieren menos framework en sus frameworks. Al igual que otras distribuciones, puede ser la fundación para un archivo de configuración personal o simplemente para empezar a aprender a usar Emacs.
Doom Emacs fue diseñado en base a algunos mantras:
Ser rápido, al iniciar y durante la ejecución, ponen prioridad en el rendimiento. Liviano, que haya la menor cantidad de cosas entre tú y Emacs. Opinionado pero no terco, incluye opciones por defecto razonables, pero podemos usar lo que queramos. Tu sistema, tus reglas, espera que el usuario sepa lo que quiere. Nix/Guix es una buena idea, el manejo de paquetes de Doom es declarativo y la configuración personal reproducible e incluye formas de retroceder versiones y actualizaciones.
La distribución está diseñada por un usuario veterano de Vim, por lo que avisan en la documentación que la experiencia general sin evil-mode no está tan pulida. De todas formas proveen una manera de deshabilitar evil-mode. Lo primero que hice al instalarlo fue buscar esta configuración entre los archivos de configuración y deshabilitarla, y después descubrí leyendo la documentación que había seguido los mismos pasos (excepto reasignar los atajos de teclado). Punto a favor para Doom Emacs que tenga una configuración fácil de modificar a pesar de no conocerla.
Doom Emacs también usa el directorio .emacs.d
y agrega además .doom.d
. Tenemos varios ejecutables para sincronizar la configuración, actualizar paquetes y más.
Probando Doom Emacs para este post, me quedé con ganas de aprender un poco más. Se ve súper lindo y provee una experiencia relativamente amigable para empezar. En su documentación responden a la comparación de Spacemacs con Doom Emacs, esto puede ayudar a decidir con cuál empezar.
Prelude
Prelude es una distribución orientada a mejorar la experiencia por defecto de Emacs. Fue desarrollada por Bozhidar Batsov, también desarrollador de Rubocop, Projectile, y otros tantos proyectos open source 🙌. Altera varias preferencias por defecto, agrega varios paquetes y librerías y provee como producto final una configuración fácil de usar para novatos y más poder para experimentados. La configuración por defecto se basa más en elegir qué queremos incluir, y no quitar cosas que no queremos usar, en comparación con otras distribuciones.
Su filosofía es: simple, fácil de entender y extender, estable, una fundación sobre la cual construir, en vez de un producto final orientado al usuario. Los paquetes elegidos son curados cuidadosamente y se caracterizan por ser bastante probados y estables. En la práctica esto implica que tiene menos cosas que Spacemas y Doom Emacs, haciéndolo una experiencia más cercana a Emacs desde cero.
La idea general es clonar el repositorio y seguir trabajando sobre él para usarlo como configuración personal. Prelude incluye un prelude-mode
, modo menor de Emacs que arega algunas funcionalidades extra, y también agrega varios atajos de teclado específicos.
Uno de los paquetes importantes de la distribución es Projectile, que provee la funcionalidad de navegar y cambiar de proyectos. Otro paquete que usa es Helm, que personalmente también lo uso en Spacemacs, y recientemente dejó de ser mantenido 😱 (con suerte se continúe un fork en algún momento).
Prelude suena como algo más cercano para quienes quieran aprender o configurar desde cero pero arrancando desde algo un poquito más amigable que Emacs de cero.
Centaur Emacs
Centaur Emacs es otra distribución que busca mejorar la experiencia por defecto, altera las preferencias, agrega paquetes y librerías y demás. Características: "out of the box", una experiencia lista para empezar a usar, limpio y rápido, búsqueda con lógica difusa, mejor soporte para Org Mode y Markdown, soporte para varios lenguajes de programación, auto completado, chequeo de sintaxis y ortografía al vuelo, integración con proyectos y espacios de trabajo (workpsaces), integración pomodoro, soporte para Docker y mejor soporte para Chino.
Mis primeras impresiones fueron buenas. Además de la apariencia general que está bastante interesante, tiene muy buen autocompletado y se siente un poco más rápido que Spacemacs cuando navego archivos, no sé si tanto así cuando escribo código. Probablemente sea porque incluye lsp-mode
y lo activa por defecto. Encontré que funciona (por lo menos en Ruby) sin tener que configurar nada. En general me dió la impresión de estar usando Emacs con un comportamiento más cercano a un IDE.
El defecto que le vi de primera mano fue que no encontré documentación detallada sobre cómo usarlo. De repente la idea es ir viendo los archivos de configuración y aprendiendo qué trae y cómo se usa. De todas formas es otra buena opción a tener en cuenta.
Conclusión
Hay varios "Starter kits" más, en este post sólo comenté los que conocía de antemano y aproveché la oportunidad para probarlos un poco. Pueden conocer más starter kits en la wiki de Emacs. Por ahora me voy a seguir quedando con Spacemacs pero me interesó de repente aprender Doom Emacs un poco más. Se nota un poco más liviano que Spacemacs, pero tendré que seguir probando a ver si vale la pena cambiar. Si fuera a empezar una configuración personal nueva, creo que empezaría con Prelude para no empezar desde cero.
Les invito a probarlos y formar su propia opinión. Lo bueno de esto es que se puede ir variando de distribución cambiando el nombre del directorio .emacs.d
y respaldándolo. Así quedó mi home con todas estas pruebas:
$ ls -a | grep emacs
drwxr-xr-x 20 fernando fernando 4.0K .emacs.d
drwxr-xr-x 16 fernando fernando 4.0K .emacs.d.centaur
drwxr-xr-x 10 fernando fernando 4.0K .emacs.d.doom
drwxr-xr-x 17 fernando fernando 4.0K .emacs.d.prelude
Y el directorio .emacs.d
actual es el de Spacemacs que tenía de antes. En otro post voy a comentar de una opción interesante para gestionar más de un perfil de Emacs. Si tienen interés en probar Emacs, espero que estas distribuciones les den un empujón más. Y por cualquier duda o ayuda, los comentarios están abiertos 🙂
Gustavo Woltmann 6 octubre. 2020 - 10:49
Muy excelente artículo he entendido mejor -Gustavo Woltmann.