¿Cómo puedo recargar .emacs después de cambiarlo?


375

¿Cómo puedo hacer que Emacs vuelva a cargar todas mis definiciones que he actualizado .emacssin reiniciar Emacs?


18
Sé que emacs a menudo se considera un sistema operativo, pero ... s / reboot / restart /?
William Pursell

66
No soy un desarrollador, por lo que muchas de las respuestas que tienen sentido de inmediato para los desarrolladores no significan mucho para mí
Yazz.com

44
@MJB el propósito de Stack Overflow es ser un depósito de conocimiento para incluso las preguntas más básicas. Esta pregunta encaja perfectamente con el propósito de Stack Overflow. Consulte stackoverflow.com/faq
chollida el


10
jaja ahora, cinco años después, la sugerencia de "Búsqueda de Google primero" lleva aquí. agradable
JimLohse

Respuestas:


350

Puede usar el comando load-file ( M-x load-file, luego presione Intro dos veces para aceptar el nombre de archivo predeterminado, que es el archivo actual que se está editando).

También puede mover el punto al final de cualquier sexp y presionar C-xC-epara ejecutar solo ese sexp. Por lo general, no es necesario volver a cargar todo el archivo si solo está cambiando una o dos líneas.


22
Tenga en cuenta que esto no siempre puede hacer exactamente lo que cree que hace. Si tiene variables cuyos contenidos son flops (es decir, establecer un valor booleano en su lado opuesto), entonces el comportamiento no será el mismo que cargar el archivo.
chollida

44
Es probable que cualquier efecto secundario en general rompa el comportamiento deseado: cargar archivos, etc.
vemv

Cuando hago esto, recibo el mensaje: carga con conversión de código: el valor del símbolo como variable es nulo: n
Chris Marie

2
En lugar de mover el punto detrás de un defuno defvar, también puede dejarlo dentro del cuerpo y el tipo de declaración C-M-x. Muy útil.
Thomas

151

Muy extraño que lo muy conveniente

M-x eval-buffer

No se menciona aquí.

Inmediatamente evalúa todo el código en el búfer, es el método más rápido, si su .emacses idempotente.


3
¿Quién dice que .emacses (o tiene que ser) idempotente?
Mike

@ Mike: yo no. "Dado a, b es verdadero" significaba para mí, "si a, b es verdadero", pero puedo ver lo que quieres decir. Cambio dado a si para más claridad.
Peter

77
@mike: ¿Cuándo tendría sentido .emacsno ser idempotente?
Zaz

Hubiera pensado que esta sería la primera sugerencia.
Stryker

1
No diría que es un buen estilo, pero podría suceder. Por ejemplo, podría elegir no redefinir una función si ya está definida (desde el primer inicio). Es posible que no vea un cambio en su definición al evaluar su archivo init.
Kaligule

43

Por lo general, puede volver a evaluar la región modificada. Marque la región de ~ / .emacs que ha cambiado y luego úsela M-x eval-region RET. Esto suele ser más seguro que reevaluar todo el archivo, ya que es fácil escribir un archivo .emacs que no funciona del todo después de cargarlo dos veces.


2
Interesante. No había considerado la idea de un archivo .emacs que no fuera idempotente. Algo a tener en cuenta cuando empiezo con ELisp
Erik

2
Supongo que es raro encontrar un archivo .emacs que sea idempotente, al menos en el sentido estricto de dos ejecuciones que dan como resultado exactamente el mismo estado que una ejecución. Por lo menos, es bastante común agregar a varias listas, a menudo de manera que no supriman las entradas duplicadas cuando se ejecutan por segunda vez.
Dale Hagglund

1
Otro pensamiento: usando el enfoque que sugiero anteriormente, es posible que el estado de emacs que tienes no sea lo que tus .emacs realmente hacen. Es decir, dado que no ha ejecutado todo el archivo .emacs desde una pizarra limpia, en realidad no sabe que hace lo que desea.
Dale Hagglund

1
Dicho esto, ¿no sería posible escribir .emacs de una manera idempotente? El estado global es asqueroso.
Ehtesh Choudhury

39

Si tiene abierto su archivo .emacs en el búfer activo actualmente:

Mx eval-buffer

12
Una cosa a tener en cuenta aquí es que hacer esto puede no dejarlo en un estado idéntico a un enfoque de reinicio. (Ejemplo contribuido: si tuvo un efecto de "alternar" en sus .emacs).
luapyad

28
M-x load-file
~/.emacs

1
Al hacer esto, aprendí que en mi instalación de Windows 7, la carpeta .emacs.d estaba ubicada en la carpeta% appdata% en lugar de la carpeta de inicio de los usuarios.
Bassdrop Cumberwubwubwub

14

Lo siguiente debería hacerlo ...

M-x load-file

13

solución

M-: (load user-init-file)


notas

  • lo escribe en el Eval:indicador (incluidos los paréntesis)
  • user-init-filees una variable que contiene el ~/.emacsvalor (que apunta a la ruta del archivo de configuración) de forma predeterminada
  • (load)es una versión más corta, antigua y no interactiva de (load-file); no es un comando emacs (para escribir M-x) sino una mera función elisp

conclusión

M-: > M-x


es M-:> Ctrl Alt x? basado en su lógica, me imagino M-: <CMx cuando solo se cambia una línea en el archivo de inicio. Tal vez sea solo ==
Robert Houghton

12

Otros ya respondieron su pregunta como se indicó, pero creo que generalmente quiero ejecutar las líneas que acabo de escribir. para eso, CtrlAltxen el lisp funciona bien.


3
Ver también eval-lastsexp, enC-x C-e
Derek Slager

Con C-M-x, no tienes que estar "al final del ceceo", ¿estás pensando C-x C-equizás? Lo bueno de esto C-M-xes que puede invocarlo incluso cuando el punto está en el medio de una declaración de función / variable.
Thomas

Probablemente tuve la costumbre de terminar el ceceo en el momento en que solo usaba Cx Ce. Gracias por la captura!
Bahbar

9

Sugiero que no hagas esto, inicialmente. En su lugar, inicie una nueva sesión de emacs y pruebe los cambios que realizó para ver si funcionan correctamente. La razón para hacerlo de esta manera es evitar dejarlo en un estado en el que tenga un archivo .emacs inoperable, que no se carga o no se carga de manera limpia. Si realiza toda su edición en la sesión original y todas sus pruebas en una nueva sesión, siempre tendrá algo confiable para comentar el código ofensivo.

Cuando finalmente esté satisfecho con sus cambios, continúe y use una de las otras respuestas para volver a cargar. Mi preferencia personal es evalsolo la sección que ha agregado / cambiado, y para hacer eso solo resalte la región del código agregado / cambiado y llame M-x eval-region. Hacer eso minimiza el código que se evalúa, minimizando los efectos secundarios no intencionales, como señala luapyad.


9

Atajo de teclado:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

¡brillante! ¡Esto es muy bueno!
PinkCollins

7
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

4

Actualmente estoy en Ubuntu 15.04; Me gusta definir una clave para esto.
[M-insert] se traduce en alt-insert en mi teclado.
Ponga esto en su archivo .emacs:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

3

Defínalo en tu archivo init y llama por Mx reload-user-init-file

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

2

Aunque M-x eval-bufferfuncionará, puede tener problemas con los conmutadores y otras cosas similares. Un mejor enfoque podría ser "marcar" o resaltar lo nuevo en sus .emacs (o incluso eliminar el búfer si solo está jugando) y luego M-x eval-region. Espero que esto ayude.


2

Aquí hay una manera rápida y fácil de probar rápidamente su configuración. También puede usar C-x C-eal final de lisp específico para ejecutar ciertas funciones individualmente.

Cx Ce ejecuta el comando eval-last-sexp (que se encuentra en global-map), que es una función interactiva de Lisp compilada.

Está vinculado a Cx Ce.

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

Evaluar sexp antes del punto; Valor de impresión en el área de eco. Interactivamente, con argumento de prefijo, imprime la salida en el búfer actual.

Normalmente, esta función trunca la salida larga de acuerdo con el valor de las variables 'eval-expression-print-length' y 'eval-expression-print-level'. Sin embargo, con un argumento prefijo de cero, no existe tal truncamiento. Tal argumento de prefijo también hace que se impriman enteros en varios formatos adicionales (octal, hexadecimal y carácter).

Si 'eval-expression-debug-on-error' no es nulo, que es el valor predeterminado, este comando organiza todos los errores para ingresar al depurador.



0

Puede configurar la combinación de teclas para emacs como este

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

Espero que esto ayude!


-2

Si tiene un shell abierto dentro de Emacs, también puede hacer:

. ~/.emacs

Puede guardar algunos golpes de tecla.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.