Come posso ricaricare .emacs dopo averlo cambiato?


375

Come posso ottenere Emacs per ricaricare tutte le mie definizioni che ho aggiornato .emacssenza riavviare Emacs?


18
So che emacs è spesso considerato un sistema operativo, ma ... s / riavvio / riavvio /?
William Pursell,

6
Non sono uno sviluppatore, quindi molte risposte che hanno immediatamente senso per gli sviluppatori non significano molto per me
Yazz.com

4
@MJB lo scopo di Stack Overflow è quello di essere un repository di conoscenze anche per le domande più elementari. Questa domanda si adatta perfettamente allo scopo di Stack Overflow. Si prega di consultare stackoverflow.com/faq
chollida


10
ahah ora, cinque anni dopo, il suggerito "cerca prima di Google" porta qui! bello
JimLohse l'

Risposte:


350

È possibile utilizzare il comando load-file ( M-x load-file, quindi premere due volte Invio per accettare il nome file predefinito, che è il file corrente in fase di modifica).

Puoi anche spostare il punto fino alla fine di qualsiasi sexp e premere C-xC-eper eseguire proprio quel sexp. Di solito non è necessario ricaricare l'intero file se stai cambiando solo una riga o due.


22
Tieni presente che questo potrebbe non fare sempre esattamente quello che pensi che faccia. Se hai variabili il cui contenuto è floppato (ovvero impostando un valore booleano sul lato opposto), il comportamento non sarà lo stesso del caricamento del file.
Chollida,

4
Eventuali effetti collaterali in genere potrebbero violare il comportamento desiderato: caricamento di file, ecc.
vemv

Quando lo faccio, ricevo il messaggio: load-with-code-conversion: il valore del simbolo come variabile è nullo: n
Chris Marie

2
Invece di spostare il punto dietro un defuno defvar, è anche possibile lasciarlo all'interno del corpo della dichiarazione e digitare C-M-x. Molto maneggevole.
Thomas,

151

Molto strano che sia molto conveniente

M-x eval-buffer

non è menzionato qui.

Valuta immediatamente tutto il codice nel buffer, è il metodo più veloce, se sei .emacsidempotente.


3
Chi dice che .emacsè (o deve essere) idempotente?
mike,

@mike: non io. "Dato a, b è vero" significava per me "se a, b è vero", ma capisco cosa intendi. Cambio a se per maggiore chiarezza.
Peter,

7
@mike: quando avrebbe senso .emacsnon essere idempotente?
Zaz,

Avrei pensato che questo fosse il primo suggerimento.
Stryker,

1
Non direi che è di buon stile ma potrebbe succedere. Ad esempio, è possibile scegliere di non ridefinire una funzione se è già definita (dal primo avvio). Potresti non vedere un cambiamento nella sua definizione durante la valutazione del tuo file init.
Kaligule il

43

Di solito puoi semplicemente rivalutare la regione cambiata. Contrassegna la regione di ~ / .emacs che hai modificato e quindi utilizza M-x eval-region RET. Questo è spesso più sicuro della rivalutazione dell'intero file poiché è facile scrivere un file .emacs che non funziona abbastanza bene dopo essere stato caricato due volte.


2
Interessante. Non avevo considerato l'idea di un file .emacs che non fosse idempotente. Qualcosa a cui prestare attenzione quando inizio con ELisp
Erik

2
Direi che è raro trovare un file .emacs che è idempotente, almeno nel senso forte di due esecuzioni con conseguente esattamente nello stesso stato come un'esecuzione. Per lo meno, è abbastanza comune aggiungere a vari elenchi, spesso in modi che non sopprimono le voci duplicate quando eseguite una seconda volta.
Dale Hagglund,

1
Un altro pensiero: usando l'approccio che suggerisco sopra, è possibile che lo stato di emacs che hai non sia quello che fa il tuo .emacs. Cioè, dal momento che non hai eseguito l'intero file .emacs da una lavagna pulita, in realtà non sai che fa quello che vuoi.
Dale Hagglund,

1
Detto questo, non sarebbe possibile scrivere .emacs in modo idempotente? Lo stato globale è icky.
Ehtesh Choudhury,

39

Se il file .emacs è aperto nel buffer attualmente attivo:

Mx eval-buffer

12
Una cosa da tenere presente è che ciò potrebbe non lasciarti in uno stato identico a un approccio di riavvio. (Esempio contrastato: se hai avuto un effetto "toggle" nel tuo .emacs).
luapyad,

28
M-x load-file
~/.emacs

1
In questo modo ho imparato che sulla mia installazione di Windows 7, la cartella .emacs.d si trovava nella cartella% appdata% invece che nella cartella home degli utenti.
Bassdrop Cumberwubwubwub

14

Quanto segue dovrebbe farlo ...

M-x load-file

13

soluzione

M-: (load user-init-file)


Appunti

  • lo digiti nel Eval:prompt (comprese le parentesi)
  • user-init-fileè una variabile che contiene il ~/.emacsvalore (che punta al percorso del file di configurazione) per impostazione predefinita
  • (load)è la versione più breve, più vecchia e non interattiva di (load-file); non è un comando emacs (da digitare M-x) ma una semplice funzione elisp

conclusione

M-: > M-x


è M-:> Ctrl Alt x? in base alla tua logica immagino M-: <CMx quando viene cambiata solo una riga nel file init? Forse è solo ==
Robert Houghton il

12

Altri hanno già risposto alla tua domanda come indicato, ma trovo che di solito voglio eseguire le righe che ho appena scritto. per quello, CtrlAltxnel lisp funziona bene.


3
Vedi anche eval-lastsexp, aC-x C-e
Derek Slager,

Con C-M-x, non devi essere "alla fine del lisp" - stai C-x C-eforse pensando ? La cosa bella C-M-xè che puoi invocarlo anche quando il punto è nel mezzo di una dichiarazione funzione / variabile.
Thomas,

Probabilmente ho preso l'abitudine di finire lisp al momento in cui ho usato solo Cx Ce. Grazie per la cattura!
Bahbar,

9

Ti suggerisco di non farlo inizialmente. Invece, avvia una nuova sessione di emacs e verifica le modifiche apportate per vedere se funzionano correttamente. Il motivo per farlo in questo modo è quello di evitare di lasciarti in uno stato in cui hai un file .emacs non funzionante, che non riesce a caricarsi o non si carica in modo pulito. Se esegui tutte le modifiche nella sessione originale e tutti i test in una nuova sessione, avrai sempre qualcosa di affidabile per commentare il codice offensivo.

Quando sei finalmente soddisfatto delle tue modifiche, vai avanti e usa una delle altre risposte per ricaricare. La mia preferenza personale è evalsolo la sezione che hai aggiunto / modificato, e per farlo basta evidenziare la regione del codice aggiunto / modificato e chiamare M-x eval-region. Ciò riduce al minimo il codice valutato, riducendo al minimo gli effetti collaterali involontari, come sottolinea luapyad.


9

Scorciatoia da tastiera:

(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! Questo va molto bene!
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

Sono attualmente su Ubuntu 15.04; Mi piace definire una chiave per questo.
[M-insert] si traduce in alt-insert sulla mia tastiera.
Inserisci questo nel tuo file .emacs:

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

3

Definiscilo nel tuo file init e chiama da Mx reload-user-init-file

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

2

Sebbene M-x eval-bufferfunzionerà, potresti riscontrare problemi con le levette e altre cose simili. Un approccio migliore potrebbe essere quello di "contrassegnare" o evidenziare ciò che è nuovo nel tuo .emacs (o persino buffer di memoria se stai solo scherzando) e poi M-x eval-region. Spero che sia di aiuto.


2

Ecco un modo semplice e veloce per testare rapidamente la tua configurazione. È inoltre possibile utilizzare C-x C-ealla fine di lisp specifici per eseguire determinate funzioni singolarmente.

Cx Ce esegue il comando eval-last-sexp (che si trova in global-map), che è una funzione Lisp compilata interattiva.

È legato a Cx Ce.

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

Valuta sexp prima del punto; valore di stampa nell'area dell'eco. In modo interattivo, con argomento prefisso, stampa l'output nel buffer corrente.

Normalmente, questa funzione tronca l'output lungo in base al valore delle variabili 'eval-expression-print-length' e 'eval-expression-print-level'. Con un argomento prefisso pari a zero, tuttavia, non esiste tale troncamento. Un tale argomento prefisso causa anche la stampa di numeri interi in diversi formati aggiuntivi (ottale, esadecimale e carattere).

Se 'eval-expression-debug-on-error' è diverso da zero, che è l'impostazione predefinita, questo comando consente a tutti gli errori di entrare nel debugger.



0

Puoi impostare l'associazione dei tasti per emacs in questo modo

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

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

Spero che questo possa aiutare!


-2

Se ti capita di avere una shell aperta all'interno di Emacs, puoi anche fare:

. ~/.emacs

Può salvare alcuni tasti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.