如何结束不必要的buffer

比如我在dired使用!执行命令,会生成一个async-command-output,有没有办法自动删除它

怎么来定义一个函数,先查询当前buffer-list如果存在相匹配的buffer name,就用kill-buffer删除,还有如何让它智能的运行,因为这些buffer没有任何输出,完全感觉就是多余的

有一个插件可以后台把不需要的buffer删除,可以参看一下。在这里tempbuf

1 个赞

Okay,谢谢推荐,我晚上回去试试看

不会用这个插件,可能要求不一样

我目前用

(kill-buffer "shell command output)这种,但是要如何自动在buffer-list里面去搜索有没有这个buffer

想了另一个思路,类似于awesome-tab,centuar-tab的屏蔽功能,但是我用这两个都有一些小问题,有没有大神推荐一下emacs27.1自带的tab-bar-mode实现这样的功能

可以参考这个demo,改造一下:

(defun kill-some-buffers ()
  "Kill some buffer"
  (mapcar
   (lambda (buffer)
     (if (string-prefix-p "*Shell Command Output" (buffer-name buffer))
         (with-current-buffer buffer
           (when (buffer-live-p buffer)
             (if (or buffer-offer-save
                     (and buffer-file-name (buffer-modified-p)))
                 (message "buffer modified"))
             (let ((name (buffer-name buffer)))
               (message "kill buffer %s" name)
               (kill-buffer buffer))))))
   (buffer-list)))
(run-at-time 5 15 'kill-some-buffers)
1 个赞

你需要 midnight-mode

其实不需要kill这些buffer,不关联文件、不跑shell的buffer基本不会占用任何资源,唯一的问题可能是在filter buffer的时候带来一点点干扰(还要它的名字和你想找的buffer相似),等emacs卡死/闪退、系统重启而再启动Emacs之后,这些buffer根本就和没存在过一样(不像和文件关联的buffer可以通过desktop恢复)

我一般在*ibuffer*看一下,打开的buffer总数达到多少了,如果还是两位数,80以下基本就不会管,达到80+总有种emacs随时会崩的感觉(可能是心理作用),这时就在*ibuffer*里结束一些, 似乎可以写一个定时器定时检查buffer的总数达到了某一数值,弹出提醒,这样就不用老去*ibuffer*里面看了

倒不是说占用资源,只是感觉没有任何输出的buffer到底有什么存在意义,对我来说,不管是message, warning, backtrace这些都有它们的功能,但是shell command output这种完全感觉就是一个摆设

我没有那么夸张,顶多20已经很了不起了

经常把不用的关掉,20也差不多了,只是一直在打开而不关,那还是很快就上去了

差不多就是这样,习惯都是把编辑好的关掉,应该没有谁只打开不关闭吧 :rofl:

tempbuf 这个符合我的胃口,自动清除dir还有长时间不显示的buffer。

1 个赞