![如何从 emacs 保存 shell 历史记录并在终端中使用它?](https://linux22.com/image/1363978/%E5%A6%82%E4%BD%95%E4%BB%8E%20emacs%20%E4%BF%9D%E5%AD%98%20shell%20%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E5%B9%B6%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%AE%83%EF%BC%9F.png)
我几乎所有事情都用 emacs,但是当我运行 shellM-x shell
然后退出 emacs 时,历史记录不会被保存,我曾尝试过(savehist-mode 1)
这个方法但似乎不起作用,有没有办法保存在 emacs 中使用的命令的历史记录并在我在 emacs 之外使用 shell 时使用它们?
答案1
savehist-mode
不适用于此处;您遇到此问题的原因是,默认情况下,Bash 仅在其内存历史缓冲区已满或退出时才会写入历史文件,并且只有在干净退出时才会写入后者 - 也就是说,被终止而不是退出的 Bash 进程永远不会将最近的命令写入历史文件。
要解决该问题,请确保在终止 shell 缓冲区之前,通过执行logout
或exit
或C-d
在提示符下键入内容,干净地完成 shell 会话;这将使 Bash 有机会在退出之前写入历史文件。
另请参阅Bash 常见问题解答关于历史文件管理,关于如何让 Bash 在执行每个命令后立即将其写入历史记录的一些想法;一旦你完成了这项工作,你就不再需要担心在杀死它们的缓冲区之前退出你的 shell,而是可以C-x k
随心所欲地去做。