如何清除 Emacs 缓冲区历史记录?

How to clear the Emacs buffer history?

当我按下 C-x b (ido-switch-buffer) 时,我得到了很多我不想看到的缓冲区。我想清除缓冲区历史记录。

我尝试评估这个表达式(使用 M-x eval-buffer):

1
(setq ido-buffer-history '())

并且生效了;我能说出来,因为我用 C-h v ido-buffer-history 查看了变量。但是,当我按 C-x b.

时,更改并未反映在迷你缓冲区中

我还应该做什么?还有其他我应该清除的变量吗?

更新:我看到的"额外"缓冲区未激活。有趣的是,C-x C-b (ido-fallback-command) 完全符合我的预期。这是我感兴趣的缓冲区历史记录。(有关更多上下文,请参阅 buffer-name-historyido-buffer-history 变量。)

注意:也许我会提到我正在使用安装了 ido-ubiquitous 的 emacs-starter-kit。


感谢 Chris,让我了解了 ido 的虚拟缓冲区。我不想完全禁用 ido-use-virtual-buffers。我想根据需要清除历史记录;这些命令实现了这个目标:

1
2
(setq ido-virtual-buffers '())
(setq recentf-list '())

(请注意,清除 ido-virtual-buffers 是不够的——还必须清除 recentf-list。)


将以下内容添加到您的 init.el:(setq ido-use-virtual-buffers nil)

为了后代:

这些都是您会话中的所有活动缓冲区。您可以使用以下命令清理它们:

  • M-x clean-buffer-list 将关闭一段时间未使用的所有干净缓冲区
  • M-x kill-some-buffers 将访问每个缓冲区并询问您是否要关闭它
  • M-x kill-matching-buffers 将提示输入缓冲区名称的正则表达式,您可以将其留空

编辑:
还有你用 C-x C-b 得到的无聊的旧缓冲区菜单。在此菜单中,您可以按住 d 直到它标记每个缓冲区以进行删除,然后按 x 提交。


我在 emacswiki 上找到了这个条目。

你所指的存储缓冲区历史的变量是buffer-name-history

如果您运行 M-x describe-variable RET buffer-name-history RET,您将看到所有不再存在的死缓冲区。 wiki 建议创建一个钩子,当你杀死一个缓冲区时,它会从列表中删除缓冲区名称。

我刚刚做了:M-x eval-expression RET (setq buffer-name-history '()) RET

这似乎奏效了。下次我运行 C-x b 时,我只循环了我的真实缓冲区。

也就是说,将变量设置为 nil 似乎会完全禁用该功能(一旦我打开更多缓冲区,该变量似乎不会重新填充)。