在处理shell命令时,一个非常有用的时间节省方式是使用Ctrl-r来搜索命令历史记录。Emacs在其shell模式中具有相同的功能:C-S-r。然而,每次重新启动emacs时,Shell的历史记录都会被清除。你有什么办法使历史记录持久化吗?
customize-group
RET savehist
RET,启用 savehist-mode
并配置您希望在会话之间保留的变量。$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-mode 会自动使用它。(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版本,快捷键与您描述的不同(在shell模式下搜索历史记录使用M-r
;C-S-r
对我来说未绑定),因此结果可能会有所不同。我总是在ansi-term
中运行我的shell,所以我无法告诉您这种功能是否最近有所改变。