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

3
当我按下C-x bido-switch-buffer)时,会出现许多我不想看到的缓冲区。我想清除缓冲区历史记录。
我尝试评估以下表达式(使用M-x eval-buffer):
(setq ido-buffer-history '())

并且它起作用了;我能够确认,因为我使用 C-h v ido-buffer-history 查看了变量。然而,当我按下 C-x b 时,这个更改没有反映在迷你缓冲区中。
我还需要做什么?我应该清除其他变量吗?
更新:我看到的“额外”缓冲区并不是活动的。有趣的是,C-x C-bido-fallback-command)显示了我期望的内容。我感兴趣的是缓冲区历史记录。(有关更多上下文,请参见 buffer-name-historyido-buffer-history 变量。)
注意:也许提一下我正在使用安装了 ido-ubiquitous 的emacs starter kit 会有所帮助。
3个回答

6

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

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

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

5
请将以下内容添加到您的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进行确认。

M-x clean-buffer-list 对我没有用。 C-x b 仍然显示未打开的缓冲区,例如 ido-ubiquitous-autoloads.el - David J.
好的,还有一些其他命令可以使用,请参见更新后的答案。 - Chris Barrett
您的回答提供了各种关闭缓冲区的建议,但这不是我需要的。所有(或几乎所有)我的缓冲区都已关闭。我的缓冲区名称历史记录包含未打开的缓冲区 - 这就是问题所在。 - David J.
我也在使用ido-switch-buffer,这些命令对我有效。你的init.el文件中有什么可疑的地方吗? - Chris Barrett

2
我在emacswiki上找到了这篇文章
你所提到的存储缓冲区历史记录的变量是buffer-name-history
如果你运行M-x describe-variable RET buffer-name-history RET,你会看到所有已经不存在的死缓冲区。维基推荐创建一个hook,每当你kill一个buffer时,就从列表中删除缓冲区名称。
我刚刚执行了:M-x eval-expression RET (setq buffer-name-history '()) RET 这似乎起作用了。下一次我运行C-x b时,我只轮流使用了我的真实缓冲区。
话虽如此,将该变量设置为nil似乎完全禁用了该功能(一旦我打开更多的缓冲区,该变量似乎不会重新填充)。

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