Краткий ответ - это включить (savehist-mode)
в вашем .emacs. Это сохранит все кольца истории минибуфера по умолчанию, включая те, shell-command-history
которые используются M-!
/ (shell-command)
.
Пока я в этом, думаю, я также объясню, как загружать / сохранять историю команд из shell-mode
приглашений и других режимов, которые происходят из comint-mode
.
Примечание: это для моей установки с bash и OSX, но внутренности этого должны работать в большинстве сред.
Сначала вам нужно скопировать историю вашей оболочки bash в среду вашего emacs. По умолчанию это хранится в переменной с именем "HISTFILE". Я делаю это с (exec-path-from-shell)
пакетом так:
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env "HISTFILE")
Тогда вам нужно вызывать (turn-on-comint-history)
в вашем подходящем режиме хуки, т.е.
(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")))
Для интерактивных рубиновых режимов вы можете видеть, что я использую локальный .pry_history
файл для каждого проекта.
Затем вам нужно убедиться, что вы сохраняете свои файлы истории коминтов при уничтожении буферов и 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)
форматирования.
Это сделает вашу историю команд оболочки минибуфера постоянной, а также историю команд командной строки bash между emacs и другими терминами.
(savehist-mode)
включил?