2014-04-08 118 views
2

使用shell的一個非常有用的省時功能是您可以使用Ctrl-r搜索命令歷史記錄。 Emacs在其shell模式下具有相同的功能:C-S-r。但是,每次重新啓動emacs時,shell的歷史記錄都會被清除。任何想法如何堅持歷史?Emacs shell:重啓後丟失的命令歷史記錄

回答

3

一般的答案是:

M-Xcustomize-groupRETsavehistRET

啓用savehist-mode和配置希望會話之間持續存在的變量。

但是在這種情況下,我認爲你會發現它是你的shell跟蹤它的命令歷史;不是Emacs。

例如對於bash,命令存儲在$HISTFILE(默認爲~/.bash_history),但根據您的設置,來自一個shell的歷史記錄可能會被另一個shell破壞,具體取決於哪一個最後退出。有關bash,請閱讀其手冊頁的HISTORY部分。

編輯:對於comint-mode和衍生物(包括shell-mode)的搜索歷史經由comint-read-input-ring讀取,其使用comint-input-ring-file-name您可以在一個模式設置鉤。不過,我建議你實際上將你的HISTFILE環境變量設置爲~/.zsh_history,因爲shell模式會自動推遲到那個時間。

對我來說,zsh並沒有這樣做,心裏有點奇怪(假設你是從zsh shell啓動Emacs的?)。如果您使用某種GUI啓動器OTOH,Emacs啓動的環境可能不是您想要的嗎?我無法肯定地說。

如果做不到這一點,文件表明,這應該工作:

(add-hook 'shell-mode-hook 'my-shell-mode-hook) 
(defun my-shell-mode-hook() 
    (setq comint-input-ring-file-name "~/.zsh_history") 
    (comint-read-input-ring t)) 

(但使用HISTFILE會更好)。

n.b.我使用的是Emacs 24.3,鍵盤綁定與您所描述的不同(M-r以shell模式搜索歷史記錄; C-S-r對我而言沒有綁定),所以YMMV。我總是在ansi-term內運行我的shell,所以我不能告訴你這個功能最近是否已經改變。

+0

我得到了迷你緩衝歷史的工作。但是,Emacs仍然缺少shell歷史記錄。我使用zsh,所以我應該設置Emacs指向〜/ .zsh_history?我在哪裏可以做到這一點? – Shuo

相關問題