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))

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

4

2 回答 2

6

也许是这样的:

(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.

于 2013-11-14T23:13:05.457 回答
1

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

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

«Emacs 经常会生成很多用户对循环不感兴趣的内部缓冲区。⁖ {从头开始消息外壳外壳命令输出发生完成适当信息,...}。您可以定义自己的 next-user-buffer 跳过 emacs 的缓冲区,并且您可以定义 next-emacs-buffer 仅循环通过 emacs 的缓冲区。»

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

于 2013-11-15T10:33:44.717 回答