Come posso ottenere Emacs per ricaricare tutte le mie definizioni che ho aggiornato .emacs
senza riavviare Emacs?
Come posso ottenere Emacs per ricaricare tutte le mie definizioni che ho aggiornato .emacs
senza riavviare Emacs?
Risposte:
È 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.
defun
o defvar
, è anche possibile lasciarlo all'interno del corpo della dichiarazione e digitare C-M-x
. Molto maneggevole.
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 .emacs
idempotente.
.emacs
è (o deve essere) idempotente?
.emacs
non essere idempotente?
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.
Se il file .emacs è aperto nel buffer attualmente attivo:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
prompt (comprese le parentesi)user-init-file
è una variabile che contiene il ~/.emacs
valore (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 elispM-:
> M-x
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.
eval-lastsexp
, aC-x C-e
C-M-x
, non devi essere "alla fine del lisp" - stai C-x C-e
forse pensando ? La cosa bella C-M-x
è che puoi invocarlo anche quando il punto è nel mezzo di una dichiarazione funzione / variabile.
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 è eval
solo 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.
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
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
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")))
Definiscilo nel tuo file init e chiama da Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Sebbene M-x eval-buffer
funzionerà, 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.
Ecco un modo semplice e veloce per testare rapidamente la tua configurazione. È inoltre possibile utilizzare C-x C-e
alla 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.
Oltre a comandi come Mx eval-buffer o Mx load-file puoi riavviare un nuovo emacs dalla riga di comando:
emacs -q --load "init.el"
Esempio di utilizzo stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
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!