Câu trả lời ngắn được kích hoạt (savehist-mode)
trong .emacs của bạn. Điều này sẽ lưu tất cả các vòng lịch sử của xe buýt nhỏ theo mặc định, bao gồm cả shell-command-history
được sử dụng bởi M-!
/ (shell-command)
.
Trong khi tôi đang ở đó, tôi cũng sẽ giải thích cách tải / lưu lịch sử lệnh từ các shell-mode
lời nhắc và các chế độ khác xuất phát từ đó comint-mode
.
Lưu ý: đây là thiết lập của tôi với bash và OSX, nhưng can đảm của nó sẽ hoạt động trong hầu hết các môi trường.
Trước tiên, bạn cần sao chép lịch sử bash shell vào môi trường emacs của bạn. Theo mặc định, điều này được lưu trữ trong một biến gọi là "HISTFILE". Tôi làm điều này với (exec-path-from-shell)
gói như vậy:
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env "HISTFILE")
Sau đó, bạn cần gọi (turn-on-comint-history)
trong móc chế độ thích hợp của bạn, tức là
(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")))
Đối với các chế độ ruby tương tác, bạn có thể thấy tôi đang sử dụng .pry_history
tệp cục bộ trên cơ sở từng dự án.
Sau đó, bạn cần đảm bảo rằng bạn lưu các tệp lịch sử comint của mình khi tiêu diệt bộ đệm và 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)))))
Lưu ý tôi đang sử dụng dash.el
cho (--each)
định dạng cô đọng .
Điều này sẽ làm cho lịch sử lệnh shell shelluffer của bạn liên tục cũng như lịch sử lệnh bash prompt của bạn giữa emacs và các điều khoản khác.
(savehist-mode)
kích hoạt chưa