从switch-to-buffer列表中排除“讨厌的缓冲区”

时间:2013-11-14 21:46:13

标签: emacs elisp

我的.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))

如何从交换机到缓冲区列表中排除这些讨厌的缓冲区?

2 个答案:

答案 0 :(得分: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提供功能请求。

答案 1 :(得分:1)

您可以查看ErgoEmacs的“切换到用户缓冲区”功能:http://www.ergoemacs.org/emacs/elisp_next_prev_user_buffer.html

他排除了所有内部缓冲区(以*开头的缓冲区),如果您习惯使用 magit shell 甚至,这可能会出现问题grep 缓冲区。

«Emacs经常生成很多内部缓冲区,用户对循环不感兴趣。 ⁖{ scratch 消息 shell Shell命令输出发生,< em>完成, Apropos info ,...}。您可以定义自己的下一个用户缓冲区来跳过emacs的缓冲区,您可以定义next-emacs-buffer,它只通过emacs的缓冲区循环。 »

我自己发现我不需要那种过滤器,因为我使用ido来切换缓冲区。