Haftungsausschluss: Ich benutze keine Schale, also nimm das mit einem Körnchen Salz.
eshellscheint aufzurufen eshell-write-history, um den Verlauf zu schreiben, der ein optionales Argument verwendet, appenddas standardmäßig verwendet wird nil. Dieses Argument scheint eshellderzeit nicht verwendet zu werden, scheint jedoch zu funktionieren (es leitet das Argument an weiter write-region, das ordnungsgemäß angehängt wird).
Hier gibt es einige Möglichkeiten.
(setq eshell-save-history-on-exit nil)und ruf eshell-write-historydich an
- Definieren Sie neu
eshell-write-history, um Ihre Anforderungen zu erfüllen.
Persönlich würde ich mit 1 gehen.
Als Beispiel:
(setq eshell-save-history-on-exit nil)
(defun eshell-append-history ()
"Call `eshell-write-history' with the `append' parameter set to `t'."
(when eshell-history-ring
(let ((newest-cmd-ring (make-ring 1)))
(ring-insert newest-cmd-ring (car (ring-elements eshell-history-ring)))
(let ((eshell-history-ring newest-cmd-ring))
(eshell-write-history eshell-history-file-name t)))))
(add-hook eshell-pre-command-hook #'eshell-append-history)
Dank @ joseph-garvin für die korrigierte, eshell-append-historyArbeitsfunktion
Dies behandelt das dynamische Laden des neuen Verlaufsinhalts in eine Shell nicht (z. B. Ausführen eines Befehls Xin Shell A und Anzeigen des Verlaufs in Shell B ohne erneutes Laden; wie z. B. SHARE_HISTORY von zsh). Ich weiß nicht, wie effizient es eshell-read-historyist, also würde ich zögern, es in einem Haken laufen zu lassen.
Es ist auch möglich, dass Sie mit dieser eshell-append-historyFunktion doppelte Einträge erhalten . Möglicherweise müssen Sie einige Spielereien ausführen, indem Sie alle bis auf den letzten Eintrag löschen eshell-history-ringund ihn dann nach dem Schreiben des Verlaufs auf den alten Wert zurücksetzen.
Z.B
(let ((old-ring (copy-list eshell-history-ring)))
(setq eshell-history-ring (list (car eshell-history-ring)))
; write
(setq eshell-history-ring old-ring))