在Emacs中显示所有打开的缓冲区

在Emacs中显示所有打开的缓冲区,emacs,elisp,emacs23,Emacs,Elisp,Emacs23,在emacs中,是否有一个M-x命令或键组合来将所有当前打开的缓冲区呈现到不同的窗口中? 为了清楚起见,假设我有四个打开的缓冲区,我目前只看到一个正在显示,我希望在一个步骤中在一个象限中显示每个缓冲区。我推荐ibuffer。M-x ibuffer可能就是你想要的。以下是我的ibuffer配置: ;; *Messages* is so annoying. Also, I really like ibuffer (require 'ibuf-ext) (add-to-list 'ibuffer-ne

在emacs中,是否有一个M-x命令或键组合来将所有当前打开的缓冲区呈现到不同的窗口中?
为了清楚起见,假设我有四个打开的缓冲区,我目前只看到一个正在显示,我希望在一个步骤中在一个象限中显示每个缓冲区。

我推荐ibuffer。M-x ibuffer可能就是你想要的。以下是我的ibuffer配置:

;; *Messages* is so annoying. Also, I really like ibuffer
(require 'ibuf-ext)
(add-to-list 'ibuffer-never-show-predicates "^\\*Messages")
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions")
(global-set-key (kbd "C-b") 'ibuffer)
(kill-buffer "*scratch*")
('ibuffer)
(switch-to-buffer "*Ibuffer*")

如果没有已知的方法,您可以从以下代码开始:

(在窗口列表中定义缓冲区()
(let(缓冲区)
(步行窗(lambda(窗)(推(窗缓冲窗)缓冲窗)t)
缓冲区)
(取消显示所有缓冲区()
(互动)
(let(窗口中的缓冲区(窗口列表中的缓冲区))
(数据列表(缓冲区(缓冲区列表))
(当(和(非(字符串匹配“\\`[:space:]*\\*”(缓冲区名称缓冲区)))
(不是(窗口中的memq缓冲区)))
(设置窗口缓冲区(拆分窗口(获取最大窗口))缓冲区)
(平衡窗口)
display all buffers
命令为当前未显示在任何位置(包括其他帧)的每个缓冲区打开一个新窗口。出于可用性考虑,它会忽略名称以
*
开头的缓冲区(可选地,前缀为空白字符),因为它们通常仅用于内部使用


请注意,Emacs不允许用户将窗口设置得太小。因此,当缓冲区太多而无法显示时,该命令将按最近显示或选择的顺序显示尽可能多的缓冲区,并发出错误信号。

4个缓冲区?我的Emacs现在有188个缓冲区打开(虽然实际上只有154个在访问文件)。cjm您是否将所有这些缓冲区都划分到屏幕的不同部分?显然不是,它们不适合。我一次只显示几个(通常只有1个)。有时我有大约20个缓冲区,一个终端,俄罗斯方块和其他打开的东西,但我总是在完成那个项目后关闭它们。有时,我会使用“C-X3”和“C-X2”来拆分它们。顺便说一下,@cjm,更多的缓冲区将使用更多的RAM,对吗?@user996056:更多的RAM?这取决于缓冲区的大小。我的Emacs进程目前为59MB,是目前打开的第二大应用程序,但几乎没有问题。感谢用户996056,我不知道ibuffer,这个配置很好!