【问题标题】:Emacs shell: command history lost after restartEmacs shell:重启后命令历史丢失
【发布时间】:2014-04-08 22:58:32
【问题描述】:

使用 shell 的一个非常有用的节省时间的方法是您可以使用 Ctrl - r 搜索命令历史记录。 Emacs 在其 shell 模式下具有相同的功能:C-S-r。但是,每次重新启动 emacs 时都会清除 shell 的历史记录。知道如何坚持历史吗?

【问题讨论】:

    标签: shell emacs


    【解决方案1】:

    一般来说答案是:

    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 会更好)。

    n.b.我使用的是 Emacs 24.3,并且键绑定与您描述的不同(M-r 在 shell 模式下搜索历史;C-S-r 对我来说是未绑定的),所以 YMMV。我总是在 ansi-term 中运行我的 shell,所以我无法告诉你这个功能最近是否发生了变化。

    【讨论】:

    • 我得到了迷你缓冲区历史记录。但是,Emacs 中仍然缺少 shell 历史记录。我正在使用 zsh,所以我应该将 Emacs 设置为指向 ~/.zsh_history 吗?我在哪里可以这样做?
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2016-08-27
    • 2013-06-07
    • 2013-08-21
    相关资源
    最近更新 更多