Answers:
您可以执行以下操作:
M-x
ibuffer
* /
在干模式下标记缓冲区。
D
删除它们。
C-x C-b
到ibuffer
。
t
(dired-toggle-marks
)标记所有(如果以前没有标记)。
dired-toggle-marks
是名dired命令。按下t
也可以切换ibuffer中的所有标记,但是非脏缓冲区通常比Dired缓冲区的数量要多,因此在这种情况下切换通常没有意义。
dired
建议您不要使用另一个函数来杀死所有缓冲区,而建议您利用中的过滤器组ibuffer
,它可以让您按多种条件对缓冲区进行分组。
这是设置过滤器组的示例:
(setq-default ibuffer-saved-filter-groups
`(("Default"
;; I create a group call Dired, which contains all buffer in dired-mode
("Dired" (mode . dired-mode))
("Temporary" (name . "\*.*\*"))
)))
然后C-x C-b
打开ibuffer
窗口,您可以看到如下所示:
将光标移至[ Dired ]
(用M-p
,M-n
),然后按d
将其标记为删除
然后按x
执行。
我更喜欢这种方式,因为我不需要考虑如何将我的键绑定到新函数,并且我的缓冲区组织得更好。
ibuffer
在评估您的代码后,我首次启动时,筛选器组没有为我显示。我必须点击/ R
(绑定到ibuffer-switch-to-saved-filter-groups
)才能获得分组。
(ibuffer-switch-to-saved-filter-groups "Default")
您可以将这行代码添加到ibuffer挂钩中,如果不是,则应更改过滤器组名称Default
您是否有很多Dired缓冲区,因为您一次都想要它们?IOW,您是否想将它们分别创建为单独的缓冲区?
如果不是这样,则解决方案很简单:当您命中目录名称以在Dired中打开目录时,告诉Dired重用现有的Dired缓冲区RET
。
这样做的方法如下:
效果是,当您RET
在Dired中的目录上单击(或单击鼠标)时,find-alternate-file
会使用原来的Dired缓冲区替换为新缓冲区。
您可以随时使用Dired中的C-M-R
(aka C-M-S-r
)切换此行为。
您也可以使用helm-mini
:
M-x helm-mini
。*Di
部分单词为Dired
,无需输入更多)。在键入时,缓冲区会逐渐缩小。现在,只剩下Dired
缓冲区。按下M-a
以标记所有。TAB
切换到动作菜单,然后按K
选择动作Kill buffer(s)
。RET
执行操作。好处helm-mini
是它可以代替普通的Emacs C-x b
,因此您不必使用两个键绑定,一个用于切换缓冲区,一个用于实际的缓冲区管理器。helm-mini
是多合一的。在我的掌舵指南中阅读更多内容。
helm-mini
还可以模糊匹配缓冲器和允许打开多个缓冲器通过有标记C-SPC
或M-a
(静置中号方舟一个 LL)。您还可以通过@
在模式之前追加来缩小包含某些字符串的缓冲区,例如,@test
意味着仅选择包含字符串“ test”的缓冲区。
我会尝试这样的事情:
(require 'dash)
(defun my-kill-dired-buffers ()
(interactive)
(kill-some-buffers
(-filter (lambda (buffer)
(save-excursion
(set-buffer buffer)
(eq major-mode 'dired-mode)))
(buffer-list))))
-filter
要求dash.el
。您可能应该将其列为要求。