Emacs中的“打开最近文件”

44

Emacs是否有打开最近文件的功能(例如像“文件”>“最近打开”这样的菜单)?

我知道适用于Mac OS X的Aquamacs具有此功能。但是,所有Emacs版本都具有此功能吗?

4个回答

39
我所知道的提供这种功能最常用的方法是使用recentf-mode(更多信息请点击此处)。我在我的初始化文件中启用它,使用以下代码: (require 'recentf) (recentf-mode 1) 然后,它会提供一个交互式函数recentf-open-files,我将其绑定到C-x f,它会提供一个数字菜单,列出跨会话最近打开的文件,即使您关闭了Emacs并重新启动它,它也会保留您最近打开的文件。您可以在初始化文件中使用另一行将该函数绑定到一个快捷键上,例如: (global-set-key "\C-xf" 'recentf-open-files) (可选)
如果您经常使用Tramp,recentf也将跟踪这些文件,并进行定期清理,这可能会非常麻烦,因为这些文件是远程的。通过在启动文件中添加以下代码来防止此情况发生: (setq recentf-auto-cleanup 'never)

我不建议将recentf绑定到“C-x f”。这是打开特定文件所需的快捷键,该文件可能在我们的历史记录中,也可能不在。如果您启用了ido,请使用ido-find-file进行模糊匹配和加速。因此,在我的情况下,“C-x C-f”映射到ido-find-file,而“C-x C-r”绑定到recentf-open-files - Jaseem

24

普通的GNU Emacs没有显示最近打开文件的菜单。然而,所有的Emacs命令都有历史记录,包括find-fileC-x C-f)。在菜单中选择“File | Open”或使用emacsclient打开文件也会添加到这个历史记录中。按下C-x C-f后,按上箭头和下箭头键可以浏览已打开文件的历史记录。

如果使用desktop包启用了会话保存,则历史记录将在会话之间保存。


2
大多数人都知道或不知不觉地用ido-find-file替代了老旧的find-fileido的历史是完全不同的事情。在这里,recentf可能是更好的解决方案。 - Jaseem
7
然而,关闭 Emacs 后,这段历史记录就被清除了。 - fiacobelli
@fiacobelli,因此我建议使用desktop包。 - Gilles 'SO- stop being evil'
@Gilles 是的,我错过了最后一行。 - fiacobelli
1
一个更简单的答案是在.emacs中使用(savehist-mode 1)... 有关详细信息,请参阅cueben的答案。 - Skuge
显示剩余5条评论

11
如果你只想在Emacs会话之间保存minibuffer历史记录,可以在你的.emacs文件中添加如下内容:

(savehist-mode 1)

与保存所有打开的缓冲区不同,在重新启动Emacs时,这只保存minibuffer历史记录(例如,当打开一个文件时,您可以使用向上箭头导航到先前会话中打开的文件列表)。

我认为这是最好的解决方案!你不需要桌面。实际上,你可能不想要保存所有缓冲区... - Skuge

5

自Emacs 22版本以来,GNU Emacs已经包含库recentf.el。只需按照R.P. Dillon的指示操作即可。


何时使用recentf,何时使用savehist?Savehist也会存储文件。令人困惑。 - RichieHH
@RichieHH:为什么要在我的回答下发表这样的评论?我的回答并没有涉及到 savehist。这两者是不同的,且有不同的用例。如果您对这些区别不清楚,可以考虑提出一个相关问题来询问。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接