La respuesta corta es habilitar (savehist-mode)
en sus .emacs. Esto guardará todos los anillos del historial de minibúfer de forma predeterminada, que incluye shell-command-history
cuál es utilizado por M-!
/ (shell-command)
.
Mientras estoy en ello, creo que también explicaré cómo cargar / guardar historiales de comandos a partir de shell-mode
mensajes y otros modos que se derivan de ellos comint-mode
.
Nota: esto es para mi configuración con bash y OSX, pero las entrañas de esto deberían funcionar en la mayoría de los entornos.
Primero debe copiar su historial de bash shell en el entorno de su emacs. Por defecto, esto se almacena en una variable llamada "HISTFILE". Hago esto con el (exec-path-from-shell)
paquete así:
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env "HISTFILE")
Luego debe llamar (turn-on-comint-history)
a sus ganchos de modo apropiados, es decir
(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")))
Para los modos ruby interactivos, puede ver que estoy usando un .pry_history
archivo local por proyecto.
Luego, debe asegurarse de guardar sus archivos de historial de comics cuando elimine buffers y 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)))))
Tenga en cuenta que estoy usando dash.el
para el (--each)
formato sucinto .
Esto hará que el historial de comandos del shell de minibúfer sea persistente, así como el historial de comandos de bash prompt entre emacs y otros términos.
(savehist-mode)
habilitado