Команды сохраняются автоматически, только вам нужно убедиться, что вы действительно выходите из оболочки. Если вы просто уничтожите буфер оболочки, никакие команды не будут сохранены.
Я добавил чек в emacs exit, чтобы предупредить меня, если у меня есть открытый буфер оболочки, чтобы я мог выйти из него вручную:
(defun my-check-if-no-shell-buffer-exists ()
(if (not (get-buffer "*shell*"))
t
(message "you have a shell buffer, make sure you exit it manually")
nil))
(add-hook 'kill-emacs-query-functions 'my-check-if-no-shell-buffer-exists)
Было бы даже лучше, если бы буфер оболочки делал это автоматически при уничтожении буфера. Я думаю, что это ошибка в Emacs, что он не может это сделать.
Редактировать : Я заметил, что у меня есть настройка, которая запрещает запускать предупреждения процесса при выходе из emacs, и поэтому мне нужна была указанная выше функция. Если вы получаете предупреждение о работающей оболочке уже при выходе, то вам это не нужно, вам нужно только выйти из оболочки вручную, чтобы сохранить историю.