2013-11-14 53 views
6

我有這個在我的.emacs:從交換機到緩衝區列表中排除「恨緩衝區」

(global-set-key "\M-s" 'switch-to-buffer) 

而且也:

(defvar crs-hated-buffers 
    '("KILL" "*Compile-Log*" "*Buffer List*" "*Messages*" "*Occur*" 
    "*Completions*" "*compilation*" "TAGS" "*scratch*" "*grep*" 
    "source" "headers")) 
(setq iswitchb-buffer-ignore (append '(
    "^ " 
    "^\\*Buffer" 
    "^\\*Completions\\*" 
    "^\\*tramp" 
    "^\\*Dired log\\*" 
    "^\\*Quail Completions\\*" 
    "^\\*Disabled Command\\*" 
    "^TAGS" 
    ) 
    crs-hated-buffers)) 

如何排除這些討厭的緩衝區從交換機緩衝列表?

回答

5

也許是這樣的:

(global-set-key [?\M-s] 'my-switch-to-buffer) 

(defun my-switch-to-buffer() 
    (interactive) 
    (let ((completion-regexp-list '("\\`[^*]" 
            "\\`\\([^T]\\|T\\($\\|[^A]\\|A\\($\\|[^G]\\|G\\($\\|[^S]\\|S.\\)\\)\\)\\).*"))) 
    (call-interactively 'switch-to-buffer))) 

它可能值得通過M-x report-emacs-bug功能請求。

+0

感謝斯蒂芬,我得到這個錯誤:錯誤 類型參數:commandp,我切換到緩衝區 – SFbay007

+0

它需要的(互動)在那裏之間(defun定義的線...和(讓... – scottfrazer

+0

但(交互式)添加我得到這個: 切換到緩衝區:(默認...等).....沒有打開的緩衝區列表,我選擇。我是說現在的行爲完全不同於: (global-set-key「\ Ms」'switch-to-buffer) – SFbay007

1

你可能有一個看看ErgoEmacs'‘切換到用戶緩衝區’功能:http://www.ergoemacs.org/emacs/elisp_next_prev_user_buffer.html

他排除所有內部緩衝區(那些由開始*),這可能是一個問題,如果你習慣使用magit,shell或甚至grep緩衝區。

«Emacs通常會產生很多內部緩衝區,用戶不會對循環感興趣。 ⁖{劃傷消息Shell命令輸出好發完井中肯信息,...}。您可以定義自己的下一個用戶緩衝區,以跳過emacs的緩衝區,並且您可以定義通過emacs緩衝區循環的next-emacs緩衝區。 »

我自己發現我不需要那種過濾器,因爲我使用ido來切換緩衝區。

+0

或[Helm](https://github.com/emacs-helm/helm)的helm-buffers-list也很棒。這是[截圖](http://i.imgur.com/KBmpXCJ.png?1)。 –

0

你應該考慮下去不同的道路,帶開關緩衝區來對待你的艱辛:

首先,如果你還沒有使用它,可以考慮使用IDO模式。它簡化了打開文件,切換緩衝區等等。尤其是下面的選項設置:

(custom-set-variables 
    '(ido-enable-flex-matching t) 
    '(ido-everywhere t) 
    '(ido-mode t)) 

其次,專爲交換緩衝區,我會建議你init.el設置這樣的:

(define-key global-map "\C-x\C-b" 'bs-show) 

它給你的,你什麼緩存更大的概述擁有和想要對他們做什麼,如關閉或切換他們,都在一個整潔的彈出窗口。