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
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-xload-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.
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-xeval-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.
¿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.
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:
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).
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.
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.
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.
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:
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.
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.
La pregunta pregunta cómo hacer esto sin reiniciar Emacs. Lanzar una nueva copia, aunque técnicamente responde la pregunta, no parece encajar en el espíritu de la pregunta. 😄
chwarr
0
Puede configurar la combinación de teclas para emacs como este
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.
fuente
defun
odefvar
, también puede dejarlo dentro del cuerpo y el tipo de declaraciónC-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.fuente
.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.fuente
Si tiene abierto su archivo .emacs en el búfer activo actualmente:
fuente
fuente
Lo siguiente debería hacerlo ...
fuente
solución
M-:
(load user-init-file)
notas
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 elispconclusión
M-:
>M-x
fuente
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.
fuente
eval-lastsexp
, enC-x C-e
C-M-x
, no tienes que estar "al final del ceceo", ¿estás pensandoC-x C-e
quizás? Lo bueno de estoC-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 llameM-x eval-region
. Hacer eso minimiza el código que se evalúa, minimizando los efectos secundarios no intencionales, como señala luapyad.fuente
Atajo de teclado:
fuente
fuente
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:
fuente
Defínalo en tu archivo init y llama por Mx reload-user-init-file
fuente
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 luegoM-x eval-region
. Espero que esto ayude.fuente
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.fuente
Además de comandos como Mx eval-buffer o Mx load-file , puede reiniciar un emacs nuevo desde la línea de comandos:
Ejemplo de uso stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
fuente
Puede configurar la combinación de teclas para emacs como este
Espero que esto ayude!
fuente
Si tiene un shell abierto dentro de Emacs, también puede hacer:
Puede guardar algunos golpes de tecla.
fuente