Ich weiß, dass Emacs oft als Betriebssystem angesehen wird, aber ... s / reboot / restart /?
William Pursell
6
Ich bin kein Entwickler, daher bedeuten mir viele der Antworten, die für Entwickler sofort Sinn machen, nicht so viel
Yazz.com,
4
@MJB Der Zweck von Stack Overflow ist es, ein Wissens-Repository für selbst die grundlegendsten Fragen zu sein. Diese Frage passt perfekt zum Zweck des Stapelüberlaufs. Bitte sehen Sie stackoverflow.com/faq
haha jetzt fünf Jahre später führt die vorgeschlagene "Google-Suche zuerst" hierher! nett
JimLohse
Antworten:
350
Sie können den Befehl load-file verwenden ( M-xload-fileund 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.
Denken Sie daran, dass dies möglicherweise nicht immer genau das tut, was Sie denken. Wenn Sie Variablen haben, deren Inhalt gefloppt ist (dh einen Booleschen Wert auf das Gegenteil setzen), entspricht das Verhalten nicht dem Laden der Datei.
Chollida
4
Alle Nebenwirkungen im Allgemeinen können das gewünschte Verhalten
beeinträchtigen
Wenn ich das mache, bekomme ich die Nachricht: Laden mit Code-Konvertierung: Der Wert des Symbols als Variable ist ungültig: n
Chris Marie
2
Anstatt den Punkt hinter ein defunoder zu verschieben defvar, können Sie ihn auch im Deklarationskörper und -typ belassen C-M-x. Sehr praktisch.
Thomas
151
Sehr seltsam, dass das sehr praktisch ist
M-xeval-buffer
wird hier nicht erwähnt.
Es wertet sofort den gesamten Code im Puffer aus. Dies ist die schnellste Methode, wenn Sie .emacsidempotent sind.
Wer sagt, dass .emacsdas idempotent ist (oder sein muss)?
Mike
@mike: nicht ich. "Gegeben a, b ist wahr" bedeutet für mich, "wenn a, b wahr ist", aber ich kann sehen, was Sie meinen. Ich wechsle zu wenn für mehr Klarheit gegeben.
Peter
7
@mike: Wann wäre es sinnvoll, .emacsnicht idempotent zu sein?
Zaz
Ich hätte gedacht, dass dies der erste Vorschlag ist.
Stryker
1
Ich würde nicht sagen, dass es ein guter Stil ist, aber es könnte passieren. Sie können beispielsweise festlegen, dass eine Funktion nicht neu definiert wird, wenn sie bereits definiert ist (ab dem ersten Start). Bei der Auswertung Ihrer Init-Datei wird möglicherweise keine Änderung der Definition festgestellt.
Kaligule
43
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.
Interessant. Ich hatte nicht über die Idee einer .emacs-Datei nachgedacht, die nicht idempotent war. Etwas, auf das ich achten muss, wenn ich mit ELisp beginne
Erik
2
Ich würde vermuten, dass es selten ist, eine .emacs-Datei zu finden, die idempotent ist, zumindest im starken Sinne von zwei Ausführungen, die genau den gleichen Status wie eine Ausführung ergeben. Zumindest ist es durchaus üblich, an verschiedene Listen anzuhängen, häufig auf eine Weise, die doppelte Einträge bei einer zweiten Ausführung nicht unterdrückt.
Dale Hagglund
1
Ein anderer Gedanke: Mit dem oben vorgeschlagenen Ansatz ist es möglich, dass der Emacs-Status, den Sie haben, nicht dem entspricht, was Ihre .emacs tatsächlich tun. Dh, da Sie nicht die gesamte Emacs - Datei von einem sauberen Schiefer ausgeführt haben, müssen Sie nicht wirklich wissen , dass es das tut , was Sie wollen.
Dale Hagglund
1
Wäre es nicht möglich, .emacs idempotent zu schreiben? Der globale Zustand ist eklig.
Ehtesh Choudhury
39
Wenn Sie Ihre .emacs-Datei im aktuell aktiven Puffer geöffnet haben:
Beachten Sie hierbei, dass Sie sich dadurch möglicherweise nicht in einem Zustand befinden, der mit einem Neustart identisch ist. (Erfundenes Beispiel: Wenn Sie in Ihren .emacs einen "Umschalt" -Effekt hatten).
Dabei habe ich erfahren, dass sich bei meiner Windows 7-Installation der Ordner .emacs.d im Ordner% appdata% anstelle des Basisordners des Benutzers befand.
Sie geben es in der Eval:Eingabeaufforderung ein (einschließlich der Klammern)
user-init-fileist eine Variable, die ~/.emacsstandardmäß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-Funktion
ist M-:> Strg Alt x? basierend auf deiner Logik stelle ich mir M-: <CMx vor, wenn nur eine Zeile in der Init-Datei geändert wird? Vielleicht ist es nur ==
Robert Houghton
12
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.
Mit C-M-xmüssen Sie nicht "am Ende des Lispelns" sein - denken Sie C-x C-evielleicht an? Das Schöne daran C-M-xist, dass Sie es auch dann aufrufen können, wenn sich point in der Mitte einer Funktions- / Variablendeklaration befindet.
Thomas
Ich habe mir wahrscheinlich angewöhnt, das Lisp zu beenden, als ich nur Cx Ce verwendet habe. Danke für den Fang!
Bahbar
9
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 evalnur 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.
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:
Obwohl dies M-x eval-bufferfunktionieren 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-eam 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.
In der Frage wird gefragt, wie dies ohne Neustart von Emacs geschehen soll. Das Starten einer neuen Kopie, während die Frage technisch beantwortet wird, scheint nicht zum Geist der Frage zu passen. 😄
Chwarr
0
Sie können die Schlüsselbindung für solche Emacs festlegen
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.
quelle
defun
oder zu verschiebendefvar
, können Sie ihn auch im Deklarationskörper und -typ belassenC-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.quelle
.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.quelle
Wenn Sie Ihre .emacs-Datei im aktuell aktiven Puffer geöffnet haben:
quelle
quelle
Folgendes sollte es tun ...
quelle
Lösung
M-:
(load user-init-file)
Anmerkungen
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-FunktionFazit
M-:
>M-x
quelle
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.
quelle
eval-lastsexp
beiC-x C-e
C-M-x
müssen Sie nicht "am Ende des Lispelns" sein - denken SieC-x C-e
vielleicht an? Das Schöne daranC-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 AufrufsM-x eval-region
. Dadurch wird der ausgewertete Code minimiert und unbeabsichtigte Nebenwirkungen minimiert, wie luapyad betont.quelle
Tastaturkürzel:
quelle
quelle
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:
quelle
Definieren Sie es in Ihrer Init-Datei und rufen Sie es per Mx reload-user-init-file auf
quelle
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 dannM-x eval-region
. Hoffe das hilft.quelle
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.quelle
Neben Befehlen wie Mx eval-buffer oder Mx load-file können Sie über die Befehlszeile einen neuen Emac neu starten:
Verwendungsbeispiel stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
quelle
Sie können die Schlüsselbindung für solche Emacs festlegen
Hoffe das wird helfen!
quelle
Wenn Sie zufällig eine Shell in Emacs geöffnet haben, können Sie auch Folgendes tun:
Kann ein paar Tastenanschläge sparen.
quelle