Emacs shell:重新启动后命令历史记录丢失


使用 shell

的一个非常有用的节省时间是您可以使用 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,所以我无法告诉你这个功能最近是否发生了变化。

相关内容

  • 没有找到相关文章

最新更新