如何关闭 Emacs 中的所有缓冲区?

如何关闭 Emacs 中的所有缓冲区?

我经常让 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))))

相关内容