คำตอบสั้น ๆ คือเปิดใช้งาน(savehist-mode)
ใน. emac ของคุณ นี้จะช่วยทุกแหวนประวัติศาสตร์ minibuffer โดยค่าเริ่มต้นซึ่งรวมถึงshell-command-history
ซึ่งถูกใช้โดย/M-!
(shell-command)
ในขณะที่ฉันที่มันฉันคิดว่าฉันยังจะอธิบายวิธีการโหลด / บันทึกประวัติคำสั่งจากshell-mode
แจ้งและโหมดอื่น ๆ comint-mode
ที่เป็นผลมาจาก
หมายเหตุ: นี่สำหรับการตั้งค่าของฉันด้วย bash และ OSX แต่ความกล้าของสิ่งนี้จะทำงานได้ในสภาพแวดล้อมส่วนใหญ่
ก่อนอื่นคุณต้องคัดลอกประวัติ bash shell ของคุณลงในสภาพแวดล้อม emacs ของคุณ โดยค่าเริ่มต้นนี้จะถูกเก็บไว้ในตัวแปรที่เรียกว่า "HISTFILE" ฉันทำกับ(exec-path-from-shell)
แพคเกจดังนี้:
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env "HISTFILE")
จากนั้นคุณต้องโทร(turn-on-comint-history)
ใน hooks โหมดที่เหมาะสมของคุณเช่น
(defun turn-on-comint-history (history-file)
(setq comint-input-ring-file-name history-file)
(comint-read-input-ring 'silent))
(add-hook 'shell-mode-hook
(lambda ()
(turn-on-comint-history (getenv "HISTFILE"))))
(add-hook 'inf-ruby-mode-hook
(lambda ()
(turn-on-comint-history ".pry_history")))
สำหรับโหมด ruby แบบโต้ตอบคุณสามารถเห็นฉันกำลังใช้.pry_history
ไฟล์โลคัลในแต่ละโครงการ
จากนั้นคุณต้องตรวจสอบให้แน่ใจว่าคุณบันทึกไฟล์ประวัติ comint ของคุณเมื่อทำการฆ่าบัฟเฟอร์และ emacs:
(add-hook 'kill-buffer-hook #'comint-write-input-ring)
(add-hook 'kill-emacs-hook
(lambda ()
(--each (buffer-list)
(with-current-buffer it (comint-write-input-ring)))))
หมายเหตุฉันใช้dash.el
สำหรับการ(--each)
จัดรูปแบบรวบรัด
สิ่งนี้จะทำให้ประวัติคำสั่งเชลล์ minibuffer ของคุณคงอยู่ตลอดจนประวัติคำสั่ง bash prompt ของคุณระหว่าง emacs และข้อกำหนดอื่น ๆ
(savehist-mode)
เปิดใช้งานหรือไม่