Configuración De Emacs Paso a Paso (03)
Continuamos configurando nuestro Emacs, paquetes generales para programar. Projectile, Magit, Yasnippet, Flycheck y Company.
Tengo que comentar que uso Emacs como cliente la mayor parte del tiempo. Eso hace que Emacs se arranque una sola vez (por sesión) como servidor y las sucesivas llamadas a Emacs abren buffers en la misma instancia.
Para trabajar de esta forma he creado alias para invocar el editor. En zsh es fácil sin más que instalar el bundle emacs
de oh-my_zsh, que añade alguna funcionalidad a mayores. Pero si no usas zsh ni oh-my-zsh te valdría con estos alias:
|
|
Se trata de tener alias que llamen siempre a emacsclient, en caso de necesidad tenemos un alias que llama al Emacs original.
Trabajar de esa forma es mucho más rápido y carga menos al sistema pero tiendes a acumular un montón de ficheros abiertos (buffers en _Emacs).
Mi atajo C-del
, o sea control-suprimir para cerrar los buffers y el uso del paquete projectile (C-c p k
cierra todos los buffers del proyecto activo) me ayudan a mantener acotado el número de ficheros abiertos.
projectile
projectile identifica un arbol de directorio como proyecto si es un repo de git (considera también otros sistemas de control de versiones, pero yo sólo uso git) o si creamos un fichero .projectile (puede estar vacío)
Con el uso normal que hagamos de nuestro editor projectile va recopilando “proyectos” y los apunta en un fichero en el directorio ~/.emacs.d
Con la configuración propuesta tenemos muchísimos atajos de teclado para invocar a projectile, en la página de _counsel-projectile podemos ver un amplio listado.
Si invocamos C-c p
gracias a which-key veremos los comandos de projectile a nuestra disposición. Los que más uso son:
C-c p p
: Cambiar de proyecto
C-c p f
: Abrir fichero en el proyecto actual
C-c p b
: Ir a un buffer (un fichero ya abierto en Emacs) del proyecto actual
C-c p k
: Cerrar todos los buffers del proyecto actual.
Durante mi sesión de trabajo suelo cambiar a un proyecto C-c p p
y abrir los ficheros necesarios en el proyecto que esté trabajando C-c p f
y terminar cerrando todos los ficheros del proyecto al final C-c p k
|
|
git: Magit y git-gutter
Dos paquetes para interactuar con git: Magit y git-gutter
Magit es un super paquete, con una versatilidad y utilidad a la altura del org-mode, por si solo ya justifica usar Emacs. En el artículo A walkthrought the Magit interface tenemos una excelente introducción al uso de este paquete que nos permite hacer todas las operaciones de git sin salir de nuestro editor. Pero no solo eso, magit también hará que si usamos Emacs como editor configurado en git se use toda la potencia de Magit al editar los mensajes de commits. C-c g
Nos llevará a la ventana de estado de Magit
Por su parte git-gutter marcará las lineas que estamos editando en cualquier fichero que esté monitorizado por git, como si tuviéramos activado un diff en tiempo real, además con el arbol hydra configurado podemos navegar por los cambios hechos en el fichero y hacer commits de cambios atómicos(pasar al stage solo los cambios en el fichero que nos interesen) M-g M-g
abre la hydra de git-gutter
|
|
yasnippet
yasnippet nos permite usar plantillas para bloques muy usados. Por ejemplo si estamos programando, digamos en python, podemos tener plantillas para los bloques for o para un bloque if-else o para la cabecera de ficheros, etc. Junto con yasnippet he instalado yasnippets-snippets que es una buena colección de snippets predefinidos.
Puedes crear fácilmente tus propios snippets (echa un ojo a la documentación)
Como complemento instalo también el paquete auto-yasnippet que permite crear un snippet “al vuelo” mientras estás editando.
|
|
A mayores añadimos un par de atajos de teclado para definir un auto-snippet y para expandirlo. He asignado la combinación C-ñ
como prefijo para mi own-map pero podeis asignar cualquier combinación libre, como por ejemplo C-z
flycheck
flycheck nos dará detección de errores sintácticos cuando estamos programando.
|
|
auto-complete o company
Hay dos escuelas principales de auto completado en Emacs: podemos usar el paquete auto-complete o el paquete company. Yo de momento estoy usando auto-complete, pero estoy probando company que parece que da menos problemas de compatibilidad con los paquetes que uso para programar en python.
Los ficheros de configuración basados en auto-complete quedan en el repositorio de gitlab (ver sección ficheros para descargar) en la rama auto-complete. Los he usado durante varios meses sin demasiados problemas. Para el resto de esta serie vamos a utilizar una configuración basada en company.
company
company es un paquete muy modular que se complementa con _plugins para distintas tareas, a medida que vayamos añadiendo nuevas secciones para distintos entornos de programación iremos añadiendo los plugins necesarios.
De momento vamos a añadir la configuración básica de company:
|
|
Ficheros para descargar
Los ficheros descritos: init.el
y myinit.org
puedes descargarlos desde este enlace
Los ficheros están almacenados en https://gitlab.com/comacero/emacs_conf_step e irán ampliándose a medida que publiquemos esta serie. En realidad el único fichero que tienes que actualizar es el myinit.org
. El init.el
debería cambiar automaticamente sin intervención de nadie.