2012-08-29 75 views
2

在emacs中,是否有M-x命令或组合键将所有当前打开的缓冲区渲染到不同的窗口中?为了清楚起见,我们假设我有四个打开的缓冲区,而且我只看到当前正在显示的一个缓冲区,并且我想在一个步骤中将每个缓冲区显示在一个象限中。显示Emacs中所有打开的缓冲区

+0

4个缓冲区?我的Emacs现在有188个缓冲区(尽管实际上只有154个缓冲区正在访问文件)。 – cjm

+0

cjm你有所有这些缓冲区分裂成屏幕的不同部分? –

+0

显然不是,他们不适合。我一次只有几个实际显示(通常只有1个)。 – cjm

回答

2

您将能够开始与下面的代码,如果没有一个已经知道的方式做到这一点:

(defun buffer-in-window-list() 
    (let (buffers) 
    (walk-windows (lambda (window) (push (window-buffer window) buffers)) t t) 
    buffers)) 

(defun display-all-buffers() 
    (interactive) 
    (let (buffers-in-window (buffer-in-window-list)) 
    (dolist (buffer (buffer-list)) 
     (when (and (not (string-match "\\`[[:space:]]*\\*" (buffer-name buffer))) 
       (not (memq buffer buffers-in-window))) 
     (set-window-buffer (split-window (get-largest-window)) buffer))) 
    (balance-windows))) 

display-all-buffers命令打开一个新窗口每个当前不显示的缓冲区(包括其他帧)。为了便于使用,它忽略了名称以*(可选地,以空白字符为前缀)开头的缓冲区,因为它们通常仅供内部使用。

请注意,Emacs不允许用户制作太小的窗口。因此,当显示的缓冲区太多时,命令会按照最近的显示或选择顺序显示尽可能多的缓冲区,并发出错误信号。

3

我推荐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*") 
+0

感谢user996056,我不知道关于ibuffer,并且这个配置很好! –

相关问题