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-history 和 ido-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 提交。
- M-x clean-buffer-list 不是为我做的。 C-x b 仍然显示未打开的缓冲区,例如 ido-ubiquitous-autoloads.el。
-
好的,您可以使用其他一些命令,请参阅更新的答案。
-
您的回答就如何关闭缓冲区提供了各种建议,但这不是我所需要的。我的所有(或几乎所有)缓冲区都已关闭。我的缓冲区名称历史记录包含未打开的缓冲区——这就是这里的问题。
-
我也在使用 ido-switch-buffer,这些命令对我有用。您的 init.el 中有什么可疑之处吗?
我在 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 似乎会完全禁用该功能(一旦我打开更多缓冲区,该变量似乎不会重新填充)。