- Cuando agregamos más y más líneas
~/.emacs.d/init.elpara varios propósitos (para el modo python, para emacs-eclim, para ...), el archivo se vuelve más largo y menos legible. ¿Hay alguna manera de ayudar a organizar su contenido? Mi actual se
~/.emacs.dve así$ ls * init.el auto-save-list: elisp: python-mode.el-6.1.3 elpa: archives auctex-readme.txt s-20140910.334 auctex-11.87.7 emacs-eclim-20140809.207 eshell: historypython-mode.el-6.1.3se instaló manualmente, mientras queemacs-eclim-20140809.207fue instalado porelpa, y no estoy 100% seguro de que las otras cosas que se encuentran debajoelpa/fueranelpa. ¿Cómo puedo organizar el contenido de~/.emacs.d/?
28

.emacsy.wlno son lo suficientemente largos.Una forma clásica de hacerlo es dividirlo
.emacsen archivos separados. Por ejemplo, podría mover todos sus elementos web~/.emacs.d/web-config.ely luego cargarlos dentroinit.el:Si desea mantener
~/.emacs.dun poco más organizado, también puede cambiar estos archivos de configuración a su propio directorio:Ahora puede saltar al archivo apropiado al hacer cambios en su configuración.
Una cosa que falta de esto son las variables establecidas a través del sistema de personalización. Estos seguirán estando en su init.el principal. Aparentemente, hay una pequeña utilidad llamada init split que te permite establecer reglas sobre qué configuración de personalización va a dónde, pero nunca la he usado yo mismo. Alternativamente, el sistema "personalizar" se puede configurar para usar un archivo separado para sus modificaciones a sus configuraciones. Establezca la
custom-filevariable para especificar dónde se debe leer y escribir la configuración de "personalizar" .En cuanto al directorio en sí, siempre me ha encantado el diseño predeterminado. El cambio principal que hice fue crear un directorio para todos mis paquetes personalizados y bibliotecas que no son administrados por
package.el. Esto le da un hogar único a mi elisp personalizado que no está relacionado con la configuración.fuente
elpaadministrados porelpa? ¿Puedo moverlos a otro lado?custom-filevariable. FuenteSi te gusta el modo Org, puedes usarlo para organizar tu
.emacssin dividirlo. Bajo mi configuración actual, mi.emacsarchivo solo inicia un archivo init.org que tengo bajo~/.emacs.d/init/init.orgMediante el uso de diferentes archivos que necesita en
greplugar de simpleC-spara buscar algo, y así sucesivamente. Además, es más fácil agregar varios niveles a su organización.fuente
org-babel-load-file. ¡Dulce! (Ejemplos: github.com/vermiculus/dotfiles/blob/… , github.com/larstvei/dot-emacs )Simplemente mueva fragmentos de código
init.elpara separar archivos (bibliotecas), que luegorequire. (Useprovideen las bibliotecas para serrequired.) Coloque esos archivos donde desee y actualice enload-pathconsecuencia.fuente
~/.emacs.d/? No ofrece ninguna especificación de lo que desea. No está obligado a tener todo en un directorio. Puede colocar cosas en cualquier lugar que desee y modificar enload-pathconsecuencia. Si algún programa / herramienta solo pone cosas~/.emacs.d/(es decir, si no puede decirle dónde poner las cosas), luego muévalas a donde quiera después de que termine ese programa / herramienta.(require 'foobar)Es un ejemplo de usorequire.(add-to-list 'load-path "/my/lisp/dir")Es un ejemplo de modificaciónload-path.(provide 'foobar)Es un ejemplo de usoprovide.init.elpuede cargar bibliotecas ubicadas en cualquier lugar , no solo dentro~/.emacs.d/.Utilizo la sugerencia de targzeta que se encuentra en el Wiki de Emacs: Cargar directorio .
Básicamente tengo un ~ / .emacs.d / load-directory.el:
Luego solo pongo archivos separados en mi ~ / .emacs.d / config:
Y finalmente tengo esto en mi ~ / .emacs.d / init.el:
fuente
Obviamente, hay más de una forma de desollar este gato en particular. Mi favorito actual es usar
outline-minor-modecon outshine . Extracto:Tenga en cuenta que tendrá que salir de su repositorio de paquetes favorito.
fuente
Utilizo la siguiente estructura para realizar un seguimiento de los paquetes y archivos
Luego uso
use-packagepara administrar qué paquetes se cargan y qué personalizaciones se establecen para cada paquete. La mayoría de las veces solamentehackyelparequieren actualización, las otras carpetas a menudo son para paquetes que quiero probar o usar brevemente pero que no necesito cargar (incluso de forma inactiva).custom.eles para personalizar la configuración, que prefiero no usar (y no versión, incluso si lo uso).defaults.eles para la configuración general (barra de menú, fuente, codificación, etc.) que luego se puede sobrescribir en cualquier archivo .eluser-config/para permitir un sistema que funcione como esperaba, pero se puede ajustar para adaptarse al entorno.Había probado previamente para mantener
functions,macros,adviceen paquetes separados para permitir la delimitación entre el contenido, pero se encontró con la definición / requerir temas así que han puesto los de nuevo eninit.el. Eventualmente pueden volver a colocarse en~/.emacs.d/lisp/.Intento mantenerme
init.elordenado, ordenar el contenido por función y propósito para que encontrarlo nuevamente sea sencillo. Tuve elinit.elarchivo monolítico y seguí agregando contenido nuevo al final (o donde pensé que podría encajar) y luego terminaría sin saber qué había agregado o dónde lo había agregado cuando fui a buscarlo (y a veces la búsqueda usandoisearchno ayudó, ya que no podía recordar cómo nombraba las cosas en ese momento).fuente
Todas las respuestas existentes abordan las mejores prácticas para organizar archivos creados manualmente , me gusta
init.ely amigos. Igualmente importante es la organización de todos los archivos creados automáticamente de varios paquetes, y para esto el paqueteno-litteringes excelente.fuente
yo añadí
a emacs-lisp-mode-hook. Luego agregue a las secciones del archivo "yasnippet", "packaging", "java mode", etc. Esto funciona bien para mis 1000 líneas de código (comentarios incluidos).
EDITAR: Finalmente, cambio entre secciones con helm-imenu. En realidad, el timón se engancha automáticamente a la función imenu normal, así que todo lo que necesito es
fuente
Dividí mi
.emacsarchivo relativamente pequeño en tres partes:emacs-custom.el para personalizaciones, extrayendo muchos datos voluminosos e inútiles; el archivo se reescribe automáticamente sin tocar el archivo principal .emacs , evitando cambios espurios.
lg-lib.el para el código en lugar de la configuración: cargar mis propias bibliotecas desde ubicaciones de origen no estándar en lugar de desde el directorio de paquetes y definir varias funciones (principalmente copiadas y pirateadas en ausencia de un paquete adecuado); Es otra gran reducción del recuento de líneas .emacs .
El archivo principal .emacs : sin código voluminoso y variables de personalización voluminosas, contiene
requirellamadas para paquetes, variables que no son parte del sistema Personalizar y llamadas de función variadas para cargar e inicializar paquetes. Lo "organizo" manteniendo cuidadosamente todas las líneas pertenecientes al mismo paquete o función juntas, y separando aún más la carga del paquete y la configuración relacionada con el paquete de la funcionalidad "central". Un extracto bastante representativo:Estas secciones son pequeñas, pero seguirían siendo manejables con muchas más líneas de configuración para cada paquete.
fuente
Siga la configuración de un maestro Emacs, por ejemplo, https://github.com/purcell/emacs.d
Por ejemplo, con respecto a cómo organizar paquetes instalados manualmente y paquetes instalados desde ELPA, la configuración de Steven Purcell tiene
¿Por qué seguir a un maestro? Un punto importante de mi "Master emacs en un año" es que los novatos pueden evitar eficientemente los gastos generales de configuración y los "problemas".
Entiendo que muchas personas no están de acuerdo conmigo, pero aquí está mi caso (detallado en mi artículo ):
Comencé a usar Emacs usando la respetada configuración de Purcell ( 1403 estrellas GitHub a partir de noviembre de 2014!), Estable (5 años en desarrollo). A pesar de comenzar con eso, todavía tenía muchos problemas . Steve Purcell me ayudó a resolver todos esos problemas. (De hecho, me convertí en su Padawan durante más de un año). Al usar su configuración y los problemas de su repositorio para informar problemas, y aprovechando su experiencia, evité perder mucho tiempo. Incluso hoy, sigo observando a muchas personas que usan
git submodulepara administrar los complementos de terceros. Tanto Steve como yo dejamos de usargit submoduleesto porque puede ser una PITA .Pero si tiene mucha confianza en sus habilidades o prefiere el autoaprendizaje, este no es el camino para usted.
fuente
[email protected], ywww.emacswiki.org, y[email protected], e inclusodebbugs.gnu.org. Dicho esto, no hay nada de malo en compartir el archivo init de uno, para servir a otros como alimento para el pensamiento. El consejo es que los novatos no comiencen de esa manera; El consejo no es que las personas no compartan sus propios enfoques y consejos de inicio.Una forma innovadora y simple de limpiar su
.emacs.dcarpeta es usarorg-modey delinear todo usando bloques fuente. Luego, en su.emacsarchivo, señale suconfig.org.Un recurso maravilloso sobre esto es Harry Schwartz. Tiene un video de YouTube que toca y una publicación de blog que explica los detalles . Pude seguirlo como un novato de emacs y obtener toda la configuración. Funciona de maravilla. 1 archivo para mi entero
init.fuente