Yasal Uyarı: Eshell kullanmıyorum, bu yüzden bunu bir tane tuzla alın.
eshell
varsayılan olarak eshell-write-history
isteğe bağlı bir argüman alan geçmiş yazmak için çağırıyor gibi görünüyor . Bu argüman şu anda kullanılmamış gibi görünüyor , ancak işe yarıyor gibi görünüyor (argümanı doğru bir şekilde ekleyen üzerinden geçiriyor).append
nil
eshell
write-region
Burada birkaç seçenek var.
(setq eshell-save-history-on-exit nil)
ve eshell-write-history
kendini ara
- Yeniden tanımla
eshell-write-history
gereksinimi karşılamak için.
Şahsen ben 1 ile giderdim.
Örnek olarak:
(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)
Düzeltilmiş çalışma eshell-append-history
fonksiyonu için @ joseph-garvin'e teşekkürler
Bu, yeni geçmiş içeriklerinin bir kabuğa dinamik olarak yüklenmesini işlemez (örn. X
A kabuğundaki çalıştırma komutu ve yeniden yüklenmeden B kabuğundaki geçmişte görünmesi; zsh'ın SHARE_HISTORY gibi). Ne kadar verimli eshell-read-history
olduğunu bilmiyorum , bu yüzden bir kancada çalıştırmak için tereddüt ederdim.
Bu eshell-append-history
işlevle yinelenen girişler yapmanız da mümkündür . En son giriş dışındaki tüm kayıtları temizleyerek eshell-history-ring
, ardından geçmişi yazdıktan sonra eski değerine sıfırlayarak bazı shenaniganslar yapmanız gerekebilir .
Örneğin
(let ((old-ring (copy-list eshell-history-ring)))
(setq eshell-history-ring (list (car eshell-history-ring)))
; write
(setq eshell-history-ring old-ring))