Stellen Sie VISUAL
auf emacsclient -c
(oder eine andere Variante ohne -n
).
Die Option -n
bewirkt emacsclient
, dass sie zurückgegeben wird, sobald sie die laufende Emacs-Instanz kontaktiert, um sie anzuweisen, die Datei zu bearbeiten. Das Programm, das den Editor aufruft (hier zsh, dies gilt jedoch auch für alle anderen $VISUAL
aufgerufenen Programme ), weiß, dass Sie die Bearbeitung abgeschlossen haben, da das aufgerufene Programm beendet wurde -n
, was im Wesentlichen sofort geschieht.
Sie müssen dafür sorgen, dass das aufgerufene Programm VISUAL
beendet wird, wenn Sie die Bearbeitung abgeschlossen haben, dh wenn Sie den Puffer in Emacs schließen. Genau das ist emacsclient
ohne -n
: Es kontaktiert die laufende Emacs-Instanz, um sie anzuweisen, die Datei zu öffnen, und sitzt dann herum, bis Emacs antwortet, um emacsclient mitzuteilen, dass die Bearbeitungssitzung beendet ist. Der normale Weg, um eine Bearbeitungssitzung zu beenden, ist das Drücken von C-x #
( server-edit
). Dies benachrichtigt emacsclient und schließt den Puffer sowie den Frame, wenn er von geöffnet wurde emacsclient -c
. Durch das Schließen des Puffers wird auch der Emacsclient-Prozess benachrichtigt, dass die Sitzung beendet ist. Sie erhalten jedoch eine Warnmeldung („Puffer… hat noch Clients, töten Sie ihn?“), Die Sie durch Überschreiben der Funktion deaktivieren können server-kill-buffer-query-function
(RMS hält dies für gefährlich). In einem Rahmen geöffnet vonemacsclient -c
Durch Drücken von C-x C-c
( save-buffers-kill-terminal
) wird die Datei gespeichert, geschlossen und der Frame geschlossen.
-n
verhindert auch, dass emacsclient als Editor für git arbeitet.-n
Flagge?emacs myfile &
(oder das Windows-Äquivalent) ausführen und den Emacs-Prozess in den Hintergrund stellen. Mit emacsclient könnte ich laufenemacsclient myfile &
, aber das lässt einenemacsclient
Prozess übrig, dessen einzige Aufgabe darin besteht, zu warten und dann zu beenden. Stattdessenemacsclient -n myfile
renne ich , sodass der Emacsclient-Prozess von selbst verschwindet. Dies ist so häufig, dass ich einen Shell-Alias dafür habe:alias e='emacsclient -n'
emacsclient
im Terminal renne , weshalb ich den Sinn von nicht sehen konnte-n
. Vielen Dank