A resposta curta é habilitada (savehist-mode)
no seu .emacs. Isso salvará todos os anéis do histórico do minibuffer por padrão, incluindo o shell-command-history
que é usado por M-!
/ (shell-command)
.
Enquanto estou nisso, acho que também explicarei como carregar / salvar históricos de shell-mode
comandos de prompts e outros modos derivados comint-mode
.
Nota: isso é para minha configuração com bash e OSX, mas a coragem disso deve funcionar na maioria dos ambientes.
Primeiro, você precisa copiar o histórico do shell bash no ambiente do emacs. Por padrão, isso é armazenado em uma variável chamada "HISTFILE". Eu faço isso com o (exec-path-from-shell)
pacote assim:
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-env "HISTFILE")
Então você precisa chamar (turn-on-comint-history)
seus ganchos de modo apropriado, ou seja,
(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 modos interativos de rubi, você pode ver que estou usando um .pry_history
arquivo local por projeto.
Então você precisa salvar seus arquivos de histórico de comint ao matar buffers e 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)))))
Nota que estou usando dash.el
para a (--each)
formatação sucinta .
Isso tornará o histórico de comandos do minibuffer shell persistente, bem como o histórico de comandos do prompt do bash entre o emacs e outros termos.
(savehist-mode)
ativou?