Saltar al contenido principal

Pruebo DOOM Emacs por primera vez

Todos los años me ronda el pensamiento de volver a probar Emacs, me llama mucho la atención porque tiene muchas posibilidades. Con Vim estoy muy a gusto, pero por qué no probar algo nuevo y ver qué tal, igual me convence.

Hace un año y pico ya escribí mis Primeras impresiones usando emacs, había cosas que me gustaron pero se me hizo dura la experiencia y acabé por dejarlo.

Ahora voy a probar una estrategia distinta, en lugar de probarlo y hacerme la config a mano (LISP no me gusta, lo veo muy lioso), voy a probar con DOOM Emacs, una config muy popular lista para usar. Igual con una config ya probada por muchos la experiencia es algo más disfrutable.

Diego López Permalink

Hubo una época en la que usaba mucho #Vim y el otro día para ver que tal, probé #Emacs

Pues bien, me ha gustado mucho menos que Vim 😕, noto todo más confuso y los atajos no me acaban de gustar

¿A vosotros os gusta? 🤔

Instalando DOOM Emacs

Vamos con la instalación. De momento he instalado Emacs en mi sistema Linux y ahora voy a tirar el comando que aparece en el README de Doom Emacs para instalarlo.

De primeras el instalador me dice que si crea un fichero envvar, ni idea de qué es eso, ya podrían explicarlo. Tras buscarlo en Internet resulta que es para sincronizar el entorno de Emacs con el de la terminal, así que le doy a que sí.

Tras varios minutos instalando (ha tardado mucho más que la propia instalación de Emacs), parece que ya lo tengo todo listo. Ahora cuando abro Emacs me recibe la pantalla de bienvenida de DOOM, que hace las veces de dashboard desde el que abrir proyectos, la agenda de Org, etc.

Veamos qué ocurre si abro un proyecto frontend. Vaya, no funciona el autocompletado. Resulta que DOOM Emacs trae varios módulos que puedes activar o desactivar, y el del LSP está desactivado por defecto.

Seguimos. De momento guay, carga el esquema de color en ficheros .js y además está activado el modo Vim, eso me gusta porque es el editor que uso a diario. Además veo que están cambiados los keybindings para usar el espacio en lugar de control, esto mola porque el control a la larga se hace incómodo.

Problemas con el LSP

Toca habilitar el LSP, veamos sin es tan sencillo como activar el módulo. Esto en un proyecto de Emacs recuerdo que era un poco movida porque había que instalar varios módulos, incluido uno para el propio popup de la documentación (como también ocurre en vim con el plugin de vim-cmp y vim-lsp).

Tras habilitar el módulo lsp, he tenido que activar también el LSP para los lenguajes que uso, en este caso Javascript y atentos al comentario que me he encontrado en la config de DOOM, qué cachondos:

(javascript) all(hope(abandon(ye(who(enter(here))))))

Ahora al abrir un fichero .js me ha preguntado que qué language server quiero, las opciones eran eslint, jsts-ls, ts-ls y otro que no recuerdo, yo le he dado al de jsts-ls y al abrir un fichero me dice que está deprecado, vaya, ahora a buscar cómo cambiarlo. Si está deprecado quizás no es buena idea ponerlo como opción, o al menos marcarlo que está deprecado antes de escoger.

Tras media hora buscando he encontrado solución. Por suerte Emacs tiene una forma de ejecutar comandos, con la tecla Alt + x, y ahí puedes buscar uno que se llama lsp uninstall server.

Más problemas, al instalar ts-ls me dice starting exited y que mire el buffer stderr para más detalles. ¿no me puede sacar el error ahí mismo? Ahora tengo que buscar como se abre ese buffer.

Por fin encuentro que en Emacs existe un comando para cambiar el buffer, en concreto switch-to-buffer y ya he encontrado el error:

Command "semgrep" is not present on the path
Command "deno lsp" is not present on the path

¿En serio tiene que ser todo tan difícil? En vim, usando vim-coc, solo tuve que hacer :Coc Install coc-tsserver y listo, no tuve mayor problema.

Como estoy con Fedora y no lo actualizo desde hace mucho tiempo, he decidido probar suerte en una instalación limpia de Debian. Ahora parece que sí que tira.

Reflexiones editando código

Captura de cómo se ven varios ficheros en DOOM Emacs, la captura es del repo oficial de DOOM Emacs

Lo primero que me doy cuenta usando el LSP es que no autocompleta palabras del buffer, por ejemplo un string o algo que haya abierto antes. Recuerdo hace tiempo probando eglot y company que me pasó lo mismo y no conseguí arreglarlo (company tiene backend para palabras del buffer pero logré combinarlo con el LSP).

Una cosa que me mola de Emacs es que es gráfico y aunque me gusta que sea todo minimalista, también está guay poder tener algunos menús, imágenes o tamaños de fuente distintos.

Por ejemplo me mola mucho que al darle botón derecho te salgan algunas opciones (renombrar, ir a la definición, formatear, code actions, etc). Es cierto que siempre es más rápido saberse el keybinding, pero cuando vas rápido y no te acuerdas se agradece tener este menú. En Neovim es cierto que han metido un menú en el click derecho, pero solo para acciones simples como copiar y pegar.

El modo evil (el emulador de vim) funciona bastante bien, he probado el modo vim en otros editores y hay funciones que no están implementadas, pero aquí parece que todo funciona correctamente.

Diego López Permalink

Emacs es muy sencillo, para sustituir un texto solo tienes que hacer:

Control J, Control K, Control X, Control Shift Z, Control Y, Control O, Shift K, Control Q, Control Y otra vez, Control T, Control M, luego pulsar la primera letra que quieres cambiar y por último Control R

Una cosa que me ralla mucho es que salen constantemente cosas en la barra de abajo. Seguramente lo que sale ayuda mucho, pero al pulsar teclas sin conocer mucho de Emacs no sé si estoy liando cosas o no.

Una cosa que no me ha molado mucho es que por defecto está todo orientado a proyectos y workspaces (por el plugin de projectile). Esto seguramente sea muy útil. pero de primeras lo quiero desactivado. Si veo que necesito algo de eso lo activo, pero no me preguntes de primeras por proyectos si solamente quiero probarlo abriendo algunos ficheros.

Me gusta mucho que al pulsar espacio y una tecla te salga abajo un menú con todas las acciones que tienes, así no tienes que memorizar de primeras tantas teclas (which-key creo que se llama). Esto me suena que en vim también se puede hacer mediante plugins.

Y hablando de cosas que me gustan, también me mola el menú global para ejecutar comandos, ya que tiene un buscador incluido. Estoy por buscar si existe algo similar para Vim.

Como cosa negativa es que me tengo que memorizar un montón de keybindins nuevos (o cambiarlos por los mismos que uso en Vim).

También he activado el plugin de Neotree para tener un árbol de ficheros a lo NERDTree de Vim.

Y poco más, el resto son detallitos menores o cosas de menor importancia. Yo creo que usándolo durante un tiempo podría llegar a aconstumbrarme.

Conslusiones

Vim y Emacs son duros al inicio. Necesitas semanas de uso y frustración para superar la barrera inicial. Como al principio te sientes muy incómodo es normal dejarlo y volver a lo conocido.

DOOM Emacs lo recomiendo. Siempre es mejor hacerse la config desde cero, así controlas bien lo que necesitas, pero si no te quieres complicar DOOM es muy buena opción. Además al ser modular puedes añadir o quitar cosas que no necesites, está muy bien pensado.

¿Me cambiaré a Emacs? Pues no lo sé, me llama mucho pero yo creo que acabaré volviendo a Vim que es donde me siento más cómodo.

Diego López Permalink

Me sorprende la gente que usa el OrgMode de Emacs para apuntar de todo (agenda, tareas, notas).

Merece tanto la pena? He visto que incluso la peña usa una extensión de Org para Vim.

Yo pa ese tipo de cosas estoy con ficheros markdown en obsidian con plugins y ni tan mal