Ya está todo inventado: projectile, o las "run configurations" que Emacs llevaba décadas teniendo
El síndrome del que viene del IDE
Vienes de un IDE con todo mascado: en un test, un iconito verde al lado; le das y se ejecuta. Te guardas una "run configuration" y la repites mil veces con un clic. Llegas a Emacs y piensas: "esto no lo tiene, o tendré que programarme medio Lisp".
Casi nunca es verdad. Lo más normal es que ya esté
hecho, se llame de una forma que no imaginas, y solo
te falte el nombre. Hoy toca uno que lo resuelve casi entero:
projectile.
Qué es projectile (sin misterio)
Projectile es la pieza que sabe qué es un
"proyecto". Para él, un proyecto es cualquier carpeta
con un marcador reconocible: un .git, un
package.json, un flake.nix, un
Cargo.toml… Cuando estás dentro, projectile te da acciones
acotadas a ese proyecto en lugar de a
todo el disco:
- saltar a cualquier fichero del proyecto por nombre, sin navegar carpetas,
- buscar texto en todo el proyecto,
- cambiar de un proyecto a otro al instante,
- y —la que nos importa hoy— ejecutar comandos desde la raíz y recordarlos.
Es, más o menos, lo que en un IDE está repartido entre el "árbol de proyecto" y las "run configurations", pero en un paquete pequeño y viejo.
El menú que lo enseña todo (truco para novatos)
No hace falta memorizar nada. En Doom Emacs, pulsa la tecla líder y
luego p (de project):
SPC p
Y espera medio segundo: aparece abajo un menú con todas las acciones de proyecto y su letra. Esto vale para cualquier prefijo de Doom: pulsas el principio y el propio editor te chiva el resto. Descubrir Emacs es, en buena parte, ir pulsando prefijos y leer lo que ofrece.
Los que de verdad gastas a diario:
| Acción | Tecla |
|---|---|
| Abrir un fichero del proyecto por nombre | SPC SPC |
| Cambiar a otro proyecto | SPC p p |
| Buscar texto en todo el proyecto | SPC s p |
| Ejecutar un comando desde la raíz | SPC p c |
El truco del día: `SPC p c` como run configuration
Aquí está la joya. SPC p c (en cristiano,
projectile-compile-project) hace tres cosas que juntas
son exactamente una "run configuration":
- Ejecuta desde la raíz del proyecto, no desde la carpeta del fichero que tengas abierto. (Esto importa más de lo que parece, ya verás.)
- Recuerda el comando por proyecto.
La primera vez te pregunta qué ejecutar; escribes tu comando (tu suite
de tests, tu linter, lo que sea) y Enter. Las siguientes veces,
SPC p cy Enter ya te propone el mismo. - La salida cae en un buffer especial donde cada error es un enlace: te pones encima, Enter, y saltas al fichero y la línea exactos.
Y para repetir aún más rápido —las otras 99 veces del bucle de
trabajo—, dentro de ese buffer de resultados pulsas g y
re-ejecuta sin preguntar nada. Ese es
tu "botón de play", una tecla.
La piedra con la que tropecé (y por qué importa la raíz)
Había un detalle que me costó un susto. Existe también
SPC c c (compile "a secas"), que parece lo mismo… pero
ejecuta desde la carpeta del fichero
abierto, no desde la raíz del proyecto.
Si tu comando usa una ruta relativa —pongamos un lanzador en
bin/algo que vive en la raíz— y lo disparas desde un
fichero que está en una subcarpeta, el comando se ejecuta ahí dentro,
no encuentra bin/algo
(está un nivel más arriba), y falla con un "no such file" que te deja
loco: "¡pero si en la terminal funciona!".
Claro que funciona en la terminal: ahí estás parado en la raíz. La regla, entonces:
SPC c c→ corre donde está el fichero. Útil para cosas locales.SPC p c→ corre en la raíz del proyecto. El que quieres para lanzar tests, builds y scripts del proyecto.
Cambiar una letra arregla el "no va".
Bonus: que herede tu entorno (direnv / nix)
Una pega típica: tu comando necesita un entorno concreto (un
nix develop, un virtualenv, variables…). En la terminal lo
tienes gratis si usas direnv. Dentro de Emacs, el módulo de direnv
(envrc) hace lo mismo: al abrir un fichero del proyecto,
carga ese entorno en el buffer. Y como SPC p c se ejecuta
heredando el entorno del buffer, el comando sale con las
herramientas correctas en el PATH, igual que en tu
terminal. Si tu compilación "no encuentra" un binario que en la consola
sí está, mira por aquí antes que nada.
La moraleja: está todo inventado
Lo de hoy no fue programar nada. Fue conocer el nombre de algo que ya estaba ahí, esperando. Emacs es un editor de los setenta sobre el que se ha apilado medio siglo de gente resolviendo exactamente tus problemas. La sensación de "esto no lo tiene" casi siempre es, en realidad, "esto no sé todavía cómo se llama".
Eso cambia para qué sirve tener a alguien al lado que sí se sabe los nombres. No para escribirte el código —que también—, sino para enseñarte el editor que ya tienes. La mitad de la potencia de estas herramientas no está en instalar nada nuevo: está en descubrir lo que llevabas pisando sin verlo.
Pulsa SPC p y mira el menú. Hay más vida ahí de la que
crees.
— doomguru
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario