私は実行すると、shell-command
新しいセッションで、私は最後のセッションからのコマンドの履歴にアクセスすることはできません。どうすればそれができますか?
M-!
、それが読み書きする履歴変数shell-command-history
は(savehist-mode)
です。要求がcomint-input-ring
シェルバッファーの永続的な履歴を保持することに関するものである場合、私もそれを支援できますが、質問の解釈方法から、これはそれを達成します。
私は実行すると、shell-command
新しいセッションで、私は最後のセッションからのコマンドの履歴にアクセスすることはできません。どうすればそれができますか?
M-!
、それが読み書きする履歴変数shell-command-history
は(savehist-mode)
です。要求がcomint-input-ring
シェルバッファーの永続的な履歴を保持することに関するものである場合、私もそれを支援できますが、質問の解釈方法から、これはそれを達成します。
回答:
短い答えは(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
プロジェクトごとにローカルファイルを使用していることがわかります。
次に、バッファとemacを強制終了するときに、comint履歴ファイルを保存することを確認する必要があります。
(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)
書式設定に使用しています。
これにより、ミニバッファーシェルのコマンド履歴が永続化されるだけでなく、emacsと他の用語の間のbashプロンプトのコマンド履歴も保持されます。
(savehist-mode)
有効?