我经常让 Emacs(实际上是 Aquamacs)保持打开状态,结果导致大量缓冲区扰乱了我的自动完成功能。我希望能够关闭它们并重新开始。现在我退出并重新打开 Emacs,但感觉不对。
有没有办法关闭 Emacs 中的所有缓冲区?
这是 Emacs 24.4 / Aquamacs 3.2。
答案1
以下函数由用户名编写斯塔基在 stackoverflow 上的一个相关问题中: https://stackoverflow.com/a/3417472/2112489
(defun close-all-buffers ()
(interactive)
(mapc 'kill-buffer (buffer-list)))
编辑:正如@Drew在下面的评论中所建议的那样,保留名称中带有前导空格的内部缓冲区通常是一个好主意。文档字符串提供了此函数如何工作的解释。该F5
键的键盘快捷键只是一个示例,用于结合通用参数测试该函数。
(defun custom-kill-buffer-fn (&optional arg)
"When called with a prefix argument -- i.e., C-u -- kill all interesting
buffers -- i.e., all buffers without a leading space in the buffer-name.
When called without a prefix argument, kill just the current buffer
-- i.e., interesting or uninteresting."
(interactive "P")
(cond
((and (consp arg) (equal arg '(4)))
(mapc
(lambda (x)
(let ((name (buffer-name x)))
(unless (eq ?\s (aref name 0))
(kill-buffer x))))
(buffer-list)))
(t
(kill-buffer (current-buffer)))))
(global-set-key [f5] 'custom-kill-buffer-fn)
答案2
在我看来,您的主要问题是太多旧的缓冲区,您可能有一段时间没有访问过了。
在 emacs 中有一个命令clean-buffer-list
。默认情况下,它会清理 3 天(或 1 小时,对于某些特殊缓冲区)未访问的缓冲区。当然,您可以自定义时间。还可以查看midnight-mode
,它会在指定的时间自动执行此操作。
如果您不想杀死所有缓冲区(除了当前正在使用的缓冲区):
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))