使用shell非常有用的节省时间是您可以使用Ctrl-r搜索命令历史记录。 Emacs在shell模式下具有相同的功能:C-S-r。但是,每次重新启动emacs时都会清除shell的历史记录。知道如何坚持历史吗?
答案 0 :(得分:4)
一般来说,答案是:
M-x customize-group
RET savehist
RET
启用savehist-mode
并配置您希望在会话之间保留的变量。
然而在这种情况下,我认为你会发现它是你的shell跟踪它的命令历史;不是Emacs。
e.g。对于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模式会自动延迟。{/ p>
对我来说,似乎有点奇怪,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,所以我无法告诉你这个功能最近是否有所改变。