¿Hay alguna ventaja en usar ~ / .emacs.d / init.el en lugar de ~ / .emacs?


108

Normalmente lo he usado ~/.emacspara mi archivo de configuración, pero he notado que otros lo están usando ~/.emacs.d/init.el. ¿Hay ventajas en la init.elubicación? ¿Alguna desventaja?


44
Emacs (o al menos algunas versiones de emacs) escriben cosas en .emacs automáticamente.
Vivi

44
@Vivi A menos que estés hablando de versiones muy antiguas, Emacs escribe cosas en ellas user-init-file. Esto será .emacssi ya tenía un .emacs, y init.elsi lo usó en su lugar.
Radon Rosborough

La gente se centró en las ventajas de ~/.emacs.d/init.eldescuidar las desventajas. Contestaré esa parte: ¡no tiene desventajas en absoluto!
Omar

Tangencialmente, a partir de la versión de lanzamiento 27.1, Emacs preferirá la ruta de configuración XDG ~/.config/emacs/sobre ~/.emacs.d/. IIUC, si lo primero existe , lo último no será considerado.
phils

Respuestas:


103

Sí hay. Citando a lunaryorn en Reddit :

  • Mantiene el $HOMEdirectorio ordenado, porque todos los archivos de Emacs están perfectamente contenidos en un solo directorio. Por la misma razón, todos los paquetes de Emacs modernos escriben sus cachés, historiales, etc. dentro ~/.emacs.d/.

  • Facilita el control de versiones, especialmente si divide su init.el en diferentes archivos ~/.emacs.d. Puede comprometerse init.elcomo cualquier otro archivo, y git clone /my/emacs/config.git ~/.emacs.den un nuevo sistema le ofrece toda su configuración de Emacs, sin tener que vincular un archivo $HOME.


3
¿Cómo facilita el control de versiones? Puede dividir su archivo de inicio sin usar .emacs.d.
Gilles

3
No facilita el control de versiones si solo tiene un archivo .emacs, pero si tiene otros archivos emacs en .emacs.d, lo tiene. Por ejemplo, customguarda archivos en .emacs.d y si mantiene init.el en todos sus archivos controlados por versión de emacs están en un directorio.
Ted Roden

44
Al versionar su directorio .emacs.d / por completo, también puede mantener bajo control de versión los paquetes que instala a través de packages.el (ELPA, MELPA ...). Esto hace que sea más fácil compartir su configuración entre varias computadoras y encontrar dónde se introdujo una regresión en su configuración (realiza un seguimiento de sus dependencias). El lado malo es que hace un repositorio bastante pesado.
tuxella

11
Los sistemas de control de versiones no versionan solo un archivo, quieren versionar una carpeta. Entonces tu versión ~/, y agrega solo tu .emacs. Pero ahora, debe asegurarse de no confirmar ningún otro archivo, por lo que .hgignore o .gitignore cada otro archivo ~/. Pero ahora no puede rastrear ningún otro archivo en ~/, como ~/.bashrco ~/.bash_aliases.
zck


37

Una ventaja adicional: si todo está dentro .emacs.d, puede mantener su configuración de Emacs en Dropbox (o una alternativa) y vincular toda la configuración a su directorio de inicio. Eso hace que la sincronización entre computadoras sea trivial.


25

Si todo lo que necesita para configurar Emacs de la manera que desee es un archivo de inicio, no hay diferencia si es ~/.emacso ~/.emacs.d/init.el. Pero tiene sentido crear un directorio en el momento en que comienza a dividir su archivo de inicio, o agregar configuraciones relacionadas con Emacs, un archivo Cask, por ejemplo. Además, es el lugar donde guardará el archivo con definiciones abreviadas, el archivo de opciones personalizadas ( M-x customize), etc.

Mantenga todo perfectamente guardado ~/.emacs.d.


6

Emacs 27 presentará un nuevo archivo de inicialización early-init-fileen user-emacs-directory, a saber, en ~/.emacs.d/early-init.el. Por lo tanto, un beneficio adicional de usar en ~/.emacs.d/init.ellugar de ~/.emacsfor user-init-filees que el primero colocará ambos archivos de inicialización bajo el mismo techo, para mayor consistencia.

Hasta que se lance Emacs 27, puede encontrar la documentación de esta nueva característica en los siguientes archivos del árbol de fuentes de Emacs:


2

No estoy seguro si esto realmente hace una diferencia en términos de velocidad, pero puede compilar byte su configuración más fácilmente si su configuración está en .emacs.d/init.el(es decir, crear .emacs.d/init.elc)


1
Tenga en cuenta que ~/.emacs.eltambién es un nombre de archivo init válido.
Phil

1

Usted usa ~/.emacs.d/init.ely simplemente hace un enlace simbólico a ese archivo ~/.emacs, en caso de que otros programas / complementos esperen encontrar .emacs.

En un sistema macOS o GNU / Linux, el comando sería:

ln -s ~/.emacs.d/init.el ~/.emacs

De esta forma, obtiene todos los beneficios de VC de su ~/emacs.destructura de directorio y podrá usar un nombre más corto cuando necesite editar el archivo init.el en ~/.emacslugar de escribir ~/emacs.d/init.el👍


¿Cuáles son estos misteriosos "otros programas / complementos" que "esperan encontrar .emacs"? No creo que sea una preocupación real.
Phil

1
Un ejemplo podría ser Quicklisp, si hace un (ql: add-to-init-file), su valor predeterminado es ~ / .emacs
cseder

Que curioso Diría que cualquier caso de este tipo garantizaría informes de errores: Emacs ha admitido una variedad de nombres de archivos de inicio durante un tiempo extremadamente largo, y la secuencia de prioridad está claramente documentada, por lo que no hay una buena razón para que otros programas no lo hagan bien . Sin embargo, no esperaba un ejemplo real :) Saludos.
PHILS