的一个非常有用的节省时间是您可以使用 Ctrl - r 搜索命令历史记录。 Emacs 在其 shell 模式下具有相同的功能:C-S-r。但是,每次重新启动 emacs 时,shell 的历史记录都会被清除。知道如何保留历史吗?
一般来说,答案是:
M-x customize-group
RET savehist
RET
启用savehist-mode
并配置要在会话之间保留的变量。
然而,在这种情况下,我想你会发现是你的shell在跟踪它的命令历史;而不是Emacs。
例如,对于 bash,命令存储在 $HISTFILE
中(默认为 ~/.bash_history
(,但根据您的设置,一个 shell 的历史记录可能会被另一个 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
会更好(。
:注:我使用的是 Emacs 24.3,键绑定与您描述的键绑定不同(M-r
在 shell 模式下搜索历史记录; C-S-r
对我来说是不受约束的(,所以 YMMV。我总是在 ansi-term
内运行我的 shell,所以我无法告诉你这个功能最近是否发生了变化。