【问题标题】:Automatically saving shell history in Emacs在 Emacs 中自动保存 shell 历史记录
【发布时间】:2012-02-09 01:55:07
【问题描述】:

有没有一种简单的方法可以自动保存我在 shell 模式缓冲区中执行的每个命令?我正在从 Emacs 的 shell 缓冲区运行诸如 python 和 lua 之类的东西,除了常规的 bash 命令之外,我还想保存它们。

默认行为将历史记录保存在 .history 或 .bash_history 中,但不会将输入保存到子进程。例如,如果我执行以下操作

ls /export/hda3/tmp Python a=2+3 导入系统 sys.exit() ls /export/hda3/tmp

以下内容被保存

#1328903075 ls /export/hda3/tmp #1328903081 Python #1328903087 ls /export/hda3/tmp

【问题讨论】:

    标签: emacs


    【解决方案1】:

    命令会自动保存,只需要确保实际退出 shell。如果您只是简单地终止 shell 缓冲区,则不会保存任何命令。

    我在 emacs exit 中添加了一个检查,以警告我是否有打开的 shell 缓冲区,以便我可以手动退出:

    (defun my-check-if-no-shell-buffer-exists ()
      (if (not (get-buffer "*shell*"))
          t
        (message "you have a shell buffer, make sure you exit it manually")
        nil))
    
    (add-hook 'kill-emacs-query-functions 'my-check-if-no-shell-buffer-exists)
    

    如果shell缓冲区在杀死缓冲区时自动执行它会更好。我认为这是 emacs 中的一个错误,它无法做到这一点。

    编辑:我注意到我有一个设置可以在 emacs 退出时阻止运行进程警告,这就是我需要上述功能的原因。如果您在退出时已经收到有关正在运行的 shell 的警告,那么您不需要它,您只需要手动退出 shell 以保存历史记录。

    【讨论】:

    • 你的意思是它们是由 Emacs 自动保存的? (如果是这样,在哪里?)Bash 本身不会保存我的命令,因为我在上面运行另一个进程(即 Python 解释器)
    • 我检查了一下,它被写入 ~/.history 并且一切都在那里(bash、python 命令等)。您在 shell 中输入的所有内容都在那里。
    • 更正:在前面的评论中我说 bash,虽然我在 windows 上并且不使用 bash,所以我应该说命令提示符。如果底层 shell 是 bash,它可能相同也可能不同,尽管 emacs 本身会保存键入的 shell 命令,所以它不应该有太大的不同。
    • 奇怪,我没有“~/.history”文件
    • 好的,它保存在 ~/.bash_history 中,但是我在 shell 子进程中运行的东西没有保存。
    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 2011-10-24
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多