¿Cómo puedo hacer que Emacs vuelva a cargar todas mis definiciones que he actualizado .emacs
sin reiniciar Emacs?
¿Cómo puedo hacer que Emacs vuelva a cargar todas mis definiciones que he actualizado .emacs
sin reiniciar Emacs?
Respuestas:
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.
defun
o defvar
, también puede dejarlo dentro del cuerpo y el tipo de declaración C-M-x
. Muy útil.
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 .emacs
es idempotente.
.emacs
es (o tiene que ser) idempotente?
.emacs
no ser idempotente?
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.
Si tiene abierto su archivo .emacs en el búfer activo actualmente:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
indicador (incluidos los paréntesis)user-init-file
es una variable que contiene el ~/.emacs
valor (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 elispM-:
> M-x
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.
eval-lastsexp
, enC-x C-e
C-M-x
, no tienes que estar "al final del ceceo", ¿estás pensando C-x C-e
quizás? Lo bueno de esto C-M-x
es que puede invocarlo incluso cuando el punto está en el medio de una declaración de función / variable.
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 eval
solo 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.
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
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
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")))
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))
Aunque M-x eval-buffer
funcionará, 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.
Aquí hay una manera rápida y fácil de probar rápidamente su configuración. También puede usar C-x C-e
al 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.
Además de comandos como Mx eval-buffer o Mx load-file , puede reiniciar un emacs nuevo desde la línea de comandos:
emacs -q --load "init.el"
Ejemplo de uso stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
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!