自动关闭Emacs中所有临时缓冲区

3
我们如何自动关闭用 * 包围的临时缓冲区。例如,需要关闭 messagescompletions 缓冲区。手动逐一杀死这些缓冲区非常繁琐。
有没有一种方法可以关闭由 Emacs(而不是我们)创建的临时缓冲区?

2
杀死 *Messages**Minibuffer* 是毫无意义的,而且在某些情况下可能是危险的。你为什么要关心这些用于内部使用的缓冲区呢?在大多数情况下,你不应该关心它们。 - tripleee
4个回答

5

你真的需要关闭那些缓冲区吗?如果你使用像iswitchb这样的适当的缓冲区切换方法,那么你就不必关心临时或其他缓冲区,因为你可以直接进入任何你想要的缓冲区。


3

我建议你使用idoiswitchb来避免被临时缓冲区所打扰。这些缓冲区的存在是使用emacs的自然结果,所以不要试图逆流而上!

另一方面,如果你对打开的缓冲区列表越来越长感到烦恼,你可以使用midnight.el来在一段时间后自动关闭不活跃的缓冲区,或者使用ibuffer来轻松选择和批量关闭不需要的缓冲区。

个人而言,我会长时间保留缓冲区,偶尔使用ibuffer整理它们,并依赖ido快速切换缓冲区。在Emacs 24中,你可以将ido-use-virtual-buffers设置为t,然后ido将允许你切换到关闭的文件,并在必要时重新打开它们。


2
用户所说,最好使用智能缓冲区切换包,如iswitchbidoiswitchbiswitchb-buffer-ignoreidoido-ignore-buffers变量允许我们使用正则表达式指定要忽略的缓冲区。
然而,如果你真的想要删除这些缓冲区,那么像这样的程序将对你有所帮助:
(require 'cl)

(defvar kill-star-buffers-except
  '("\\`\\*scratch\\*\\'"
    "\\`\\*Messages\\*\\'"
    "\\` \\*Minibuf-[[:digit:]]+\\*\\'"
    "\\` \\*Echo Area [[:digit:]]+\\*\\'")
  "Exception list for `kill-star-buffers'")

(defun kill-star-buffers ()
  "Kill all star buffers except those in `kill-star-buffers-except'"
  (interactive)
  (mapc (lambda (buf)
          (let ((buf-name (buffer-name buf)))
            (when (and
                   ;; if a buffer's name is enclosed by * with optional leading
                   ;; space characters
                   (string-match-p "\\` *\\*.*\\*\\'" buf-name)
                   ;; and the buffer is not associated with a process
                   ;; (suggested by "sanityinc")
                   (null (get-buffer-process buf))
                   ;; and the buffer's name is not in `kill-star-buffers-except'
                   (notany (lambda (except) (string-match-p except buf-name))
                           kill-star-buffers-except))
              (kill-buffer buf))))
        (buffer-list)))

1
您可能还希望避免杀死返回(get-buffer-process)的非零值的缓冲区,例如编译或repl缓冲区。 - sanityinc

2
为了避免这些缓冲区妨碍你,你可以定义按键绑定来循环浏览“用户缓冲区”和“无用缓冲区”:但是一些有用的缓冲区以*开头,比如shell、编译缓冲区、ielm等。参考链接:http://ergoemacs.org/emacs/effective_emacs.html,章节“Switching Next/Previous User Buffers”。

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