永続的なシェルコマンド履歴


12

私は実行すると、shell-command新しいセッションで、私は最後のセッションからのコマンドの履歴にアクセスすることはできません。どうすればそれができますか?


1
あなたが持っている(savehist-mode)有効?
waymondo

あなたが話している場合M-!、それが読み書きする履歴変数shell-command-history(savehist-mode)です。要求がcomint-input-ringシェルバッファーの永続的な履歴を保持することに関するものである場合、私もそれを支援できますが、質問の解釈方法から、これはそれを達成します。
-waymondo

@waymondoいいえ、私はしませんでした。私の問題を解決します。回答できるようにしてください。
-RasmusWL

回答:


10

短い答えは(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プロンプトのコマンド履歴も保持されます。


2

私はsavehistこれを管理できると確信しています、ここに私のセットアップがあります:

;; Save sessions history
(setq savehist-save-minibuffer-history 1)
(setq savehist-additional-variables
      '(kill-ring search-ring regexp-search-ring compile-history log-edit-comment-ring)
      savehist-file "~/.emacs.d/savehist")
(savehist-mode t)

0

私はあなたがアドバイスすることができると思うshell-commandの歴史を保存して、いくつかの関連するキーバインディングをリマップ、例えば、ためにM-n/p、その歴史を呼び出すための、あるいはあなた自身を書くshell-command使って、read-from-minibufferあなたのような場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.