Wie kann ich Emacs dazu bringen, alle meine Definitionen, die ich aktualisiert habe, neu zu laden, .emacs
ohne Emacs neu zu starten?
Wie kann ich Emacs dazu bringen, alle meine Definitionen, die ich aktualisiert habe, neu zu laden, .emacs
ohne Emacs neu zu starten?
Antworten:
Sie können den Befehl load-file verwenden ( M-x load-file
und dann zweimal die Eingabetaste drücken, um den Standarddateinamen zu akzeptieren, bei dem es sich um die aktuell bearbeitete Datei handelt).
Sie können den Punkt auch einfach an das Ende eines Sexp verschieben und drücken C-xC-e, um genau diesen Sexp auszuführen. Normalerweise ist es nicht erforderlich, die gesamte Datei neu zu laden, wenn Sie nur ein oder zwei Zeilen ändern.
defun
oder zu verschieben defvar
, können Sie ihn auch im Deklarationskörper und -typ belassen C-M-x
. Sehr praktisch.
Sehr seltsam, dass das sehr praktisch ist
M-x eval-buffer
wird hier nicht erwähnt.
Es wertet sofort den gesamten Code im Puffer aus. Dies ist die schnellste Methode, wenn Sie .emacs
idempotent sind.
.emacs
das idempotent ist (oder sein muss)?
.emacs
nicht idempotent zu sein?
Normalerweise können Sie die geänderte Region einfach neu bewerten. Markieren Sie die Region von ~ / .emacs, die Sie geändert haben, und verwenden Sie sie dann M-x eval-region RET
. Dies ist oft sicherer als eine Neubewertung der gesamten Datei, da es einfach ist, eine .emacs-Datei zu schreiben, die nach zweimaligem Laden nicht richtig funktioniert.
Wenn Sie Ihre .emacs-Datei im aktuell aktiven Puffer geöffnet haben:
Mx Eval-Puffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
Eingabeaufforderung ein (einschließlich der Klammern)user-init-file
ist eine Variable, die ~/.emacs
standardmäßig den Wert enthält (der auf den Pfad der Konfigurationsdatei zeigt)(load)
ist eine kürzere, ältere und nicht interaktive Version von (load-file)
; Es ist kein Emacs-Befehl (der eingegeben werden muss M-x), sondern eine bloße Elisp-FunktionM-:
> M-x
Andere haben Ihre Frage bereits wie angegeben beantwortet, aber ich finde, dass ich normalerweise die Zeilen ausführen möchte, die ich gerade geschrieben habe. dafür CtrlAltxfunktioniert im lisp ganz gut.
eval-lastsexp
beiC-x C-e
C-M-x
müssen Sie nicht "am Ende des Lispelns" sein - denken Sie C-x C-e
vielleicht an? Das Schöne daran C-M-x
ist, dass Sie es auch dann aufrufen können, wenn sich point in der Mitte einer Funktions- / Variablendeklaration befindet.
Ich schlage vor, dass Sie dies zunächst nicht tun. Starten Sie stattdessen eine neue Emacs-Sitzung und testen Sie alle vorgenommenen Änderungen, um festzustellen, ob sie ordnungsgemäß funktionieren. Der Grund dafür ist, dass Sie sich nicht in einem Zustand befinden, in dem Sie eine nicht funktionsfähige .emacs-Datei haben, die nicht oder nicht sauber geladen werden kann. Wenn Sie die gesamte Bearbeitung in der ursprünglichen Sitzung und alle Tests in einer neuen Sitzung durchführen, haben Sie immer etwas Zuverlässiges, um fehlerhaften Code zu kommentieren.
Wenn Sie mit Ihren Änderungen endlich zufrieden sind, verwenden Sie eine der anderen Antworten zum erneuten Laden. Meine persönliche Präferenz ist eval
nur der Abschnitt, den Sie hinzugefügt / geändert haben, und um dies zu tun, markieren Sie einfach den Bereich des hinzugefügten / geänderten Codes und des Aufrufs M-x eval-region
. Dadurch wird der ausgewertete Code minimiert und unbeabsichtigte Nebenwirkungen minimiert, wie luapyad betont.
Tastaturkürzel:
(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
Ich bin derzeit auf Ubuntu 15.04; Ich definiere gerne einen Schlüssel dafür.
[M-Einfügen] bedeutet auf meiner Tastatur Alt-Einfügen.
Fügen Sie dies in Ihre .emacs-Datei ein:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Definieren Sie es in Ihrer Init-Datei und rufen Sie es per Mx reload-user-init-file auf
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Obwohl dies M-x eval-buffer
funktionieren wird, können Probleme mit Umschaltern und ähnlichen Dingen auftreten. Ein besserer Ansatz könnte darin bestehen, zu markieren oder hervorzuheben, was in Ihren .emacs neu ist (oder sogar den Scratch-Puffer, wenn Sie nur herumspielen) und dann M-x eval-region
. Hoffe das hilft.
Hier ist eine schnelle und einfache Möglichkeit, Ihre Konfiguration schnell zu testen. Sie können auch C-x C-e
am Ende eines bestimmten Lisp verwenden, um bestimmte Funktionen einzeln auszuführen.
Cx Ce führt den Befehl eval-last-sexp (in global-map gefunden) aus, eine interaktive kompilierte Lisp-Funktion.
Es ist an Cx Ce gebunden.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERN)
Bewerten Sie sexp vor Punkt; Druckwert im Echo-Bereich. Drucken Sie die Ausgabe interaktiv mit dem Präfixargument in den aktuellen Puffer.
Normalerweise schneidet diese Funktion die lange Ausgabe gemäß dem Wert der Variablen 'eval-expression-print-length' und 'eval-expression-print-level' ab. Bei einem Präfixargument von Null gibt es jedoch keine solche Kürzung. Ein solches Präfixargument führt auch dazu, dass Ganzzahlen in mehreren zusätzlichen Formaten (Oktal, Hexadezimal und Zeichen) gedruckt werden.
Wenn 'eval-expression-debug-on-error' nicht null ist, was die Standardeinstellung ist, sorgt dieser Befehl dafür, dass alle Fehler in den Debugger eingegeben werden.
Neben Befehlen wie Mx eval-buffer oder Mx load-file können Sie über die Befehlszeile einen neuen Emac neu starten:
emacs -q --load "init.el"
Verwendungsbeispiel stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Sie können die Schlüsselbindung für solche Emacs festlegen
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
Hoffe das wird helfen!