Saltar al contenido principal

Mis primeras impresiones usando emacs

En este artículo voy a contar mis primeras impresiones usando el editor de textos Emacs 🚧. Lo primero que tengo que decir es que vengo de Vim por lo que fijo que voy a comparar ambos editores. Como digo, esto es mi opinión personal, por lo que para otra persona la experiencia sea completamente distinta.

Por qué probar emacs

Lo primero que tengo que decir es que me molaba la idea de usar Emacs porque parece un editor muy bien integrado con todo. Como suelen decir los usuarios de emacs es un sistema operativo en sí mismo con un editor de textos incorporado.

Y es que Vim está más limitado en ese aspecto porque trata de ser muy simple, y además está pensado para utilizarse en consola (aunque tiene versión gráfica gvim, pero las limitaciones son las mismas).

Y es que me molaba la idea de tenerlo todo en emacs: consolas, debuggers, notas, clientes HTTP, correo, etc. Se supone que la gente que usa emacs para todo no abre otra aplicación en todo el día, incluso navegan por Internet desde el editor.

También quería comprobar que tal las cosas que en Vim están más limitadas o hay que hacer malabares para poder usarlas: LSP, Dap, etc.

Por último está el tema de Org, que es una manera que tiene Emacs de escribir ficheros de notas que son muy potentes. Por lo que he visto puedes crear secciones que se pueden expandir y colapsar, tablas automáticas, tareas integradas, etc.

Aquí tengo que decir que soy muy fan de Markdown por su simplicidad y porque me sirve para lo que quiero, pero quiero probar Org igualmente.

Bien, una vez visto por encima lo que me llama la antención de Emacs vamos al lío.

Cómo instale y configuré emacs

Una vez instalado, cuando lo abres de cero aparece una pantalla en blanco muy fea de bienvenida a Emacs. Esto no me sorprende ni me da miedo porque en Vim pasa un poco lo mismo, lo abres y no tienes nada más, al menos en Emacs tienes un menú.

Aquí lo primero que hice fue buscar ficheros de config que usa la gente para ver un poco mis posibilidades. También encontré dos configs muy populares ya creadas: ^spacemacs y doom-emacs. Ambas configs utilizan keybindings de Vim, por cierto.

Decidí tirar por config propia porque, aunque esas configs están muy bien hechas, cambian demasiado la experiencia de usar Emacs (aunque fijo que las pruebo).

Lo primero es saber que Emacs emplea una variante del lenguaje Lisp para generar estos ficheros de configs y crear plugins (en concreto se llama Emacs Lips o Elisp para abreviar).

Este lenguaje supongo que tendrá su utilidad para programar y tal, pero para algo simple creo que lia bastante. Aquí tengo que decir que Vim con su Vimscript tampoco es que sea mejor (aunque ahora con Neovim y Lua la cosa puede cambiar).

Miré la serie de vídeos muy recomendada de System Crafters, en la que produce una config de Emacs desde 0 explicada paso por paso.

Tengo que decir que la config que empleo es muy parecida a la de esa serie, salvo que he cambiado un par de keybindings para que sean parecidos a los que tenía en Vim, además de añadir evil-mode, un paquete que añade todos los keybindings de Vim a la hora de editar ficheros.

Mi Emacs luce tal que así:

Pantalla de emacs con el tema night owl

Opiniones tras usar emacs

Tras usar emacs con la config mencionada durante unos días tengo que decir que hay cosas que me gustan y otras que no me gustan nada. Aviso: hay muchas cosas no me gustan porque todavía tengo que buscar más config y actualizar la que tengo.

Para empezar el plugin de projectile está guay porque permite abrir varios proyectos que estés desarrollando a la vez. En vim lo que hacía era abrir otra tab de la terminal y abrir otro Vim.

Projectile tiene un comando para buscar ficheros en los proyectos (nada que no se haya visto ya en vscode o vim), simplemente escribes y busca ficheros con ese nombre.

Cuando busco ficheros hay un tema que no me gusta y es que no hace fuzzy fidning, es decir, aunque puedo simplemente poner nombre de fichero o carpeta, si por ejemplo quiero buscar el fichero userList.js, si escribo "usli" no me sale ningún resultado. Esto con Vim y el plugin te Telescope está resuelto sin tener que escribir bien el nombre completo todo el rato.

Supongo que tendré que buscar otra config para Projectile (aunque no he encontrado mucho en Internet) o usar otro plugin solo para esto.

Respecto a los keybindings los de emacs se me hacen muy extraños (hablo de los comandos que no tienen que ver con editar texto porque como ya he dicho utilizo los de vim). Son comandos de pulsar el control + otra tecla + luego otra vez control + otra tecla y así, cuestión de acostumbrarse..

Como muchos keybindings son de pulsar el control pues han cambiado las teclas hasta para hacer el mítico Control C + Control V, cosa que tampoco me gusta mucho.

Otra cosa que no me mola es lo de la terminal. Osea mola mucho poder abrir terminales (como pasa en vscode) pero debe ser que las eshells no las tengo bien configuradas porque no me cargan los colores dentro de la terminal (puede que pase por el tema que estoy utilizando, el de night owl), ah y no funciona el Control R para buscar comandos, tendré que investigar.

También con las terminales odio que no puedas abrir varias eshells. Lo que he visto por Internet es que la gente renombra el buffer de la terminal para poder abrir más (pereza).

Tengo que investigar más sobre las terminales porque al parecer hay muchas (esell, vterm y unas pocas más).

También he instalado ivy para poder tener un menú algo más cómodo para ejecutar los comandos de M-x. El caso es que he isntalado también witch-key para saber qué teclas apretar si no recuerdo el comando, pero a la hora de buscarlos como tampoco tiene fuzzy tengo que escribir el nombre del comando bien a la primera para encontrarlo.

Respecto a tema importante, el LSP (Language server protocol). Por si no lo sabes, el LSP es una cosa maravillosa, permite que los lenguajes saquen información de forma estándar para poder tener autocompletado, vamos, que si me instalo el LSP de typescript por ejemplo, puedo tener el mismo autocompletado que en el vscode.

Para vim uso el paquete de vim-coc que ya te lo da todo, lo instales y ale. Te da hasta maneras de instalar los language servers desde dentro de Vim.

En emacs estoy usando lsp-mode que lo usa la mayoría de gente. Es cierto que te da una forma de instalar los language servers, pero además necesita instalar otros tantos paquetes para tener popup de autocompletado o de documentación.

En concreto utilizo: company, lsp-ui y company-box. La cosa es que hace cosas raras. A veces me abre los ficheros sin tener el LSP activado y tengo que activarlo a mano. A veces no me autocompleta nada y otras sí.

Otra cosa que me pasa es que no autocompleta cosas del fichero (a veces sí que lo hace, veo que pone file al lado, pero no autocompleta casi nada). Con vim-coc da igual en que fichero esté, o con qué LSP, que siempre autocompleta algo de los ficheros que tenga abiertos.

Con el de Emacs muchas veces me quedo sin autocompletado porque me dice que no hay opciones, debe ser que el LSP no devuelva nada, miraré si hay más config para que funcione con el de vim (o buscar otros paquetes).

También tengo problemas con Svelte, precisamente como el LSP no devuelve nada, en Svelte en la parte de Javascript casi no autocompleta nada, y eso hace que se vuelva muy tedioso andar escribiendo todo.

Una cosa que me molestó mucho al principio es que Emacs al parecer guarda archivos autosave en el propio proyecto en el que estás, incluso me guardaba mensajes de log. Tuve que cambiar las carpetas de todas esas cosas por la carpeta temp del sistema.

Conclusiones

Como digo en el momento de escribir este artículo llevo cosa de unos días de uso, todavía tengo que habituarme, cambiar cosas de la config, aprender comandos y funciones, etc.

Mirando vídeos de gente usando emacs le veo mucho potencial, es como la mezcla perfecta entre la simplicidad de Vim en cuanto a interfaz y la potencia de un editor gráfico como Vscode 🚧.

Ahora bien, si por estar en ese punto medio va a tener las desventajas de Vim sumadas a las desventajas del Vscode pues para eso me vuelvo a Vim.

El tiempo lo dirá.