2012-08-29 121 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,並且這個配置很好! –

相關問題