7

所以我通常在 Emacs 中打开 3 个缓冲区。

  1. 我正在编写的实际代码的一个缓冲区。
  2. 用于所述代码的单元测试的一个缓冲区。
  3. 第三个缓冲区,显示单元测试的结果。当我运行单元测试时,该缓冲区位于其他两个缓冲区之下C-x SPACE

如何禁用第三个缓冲区,以便按下C-x o时仅在缓冲区 1 和缓冲区 2 之间切换?目前,我在缓冲区 1、缓冲区 2、缓冲区 3、缓冲区 1 之间切换,等等。具体来说,我只想C-x o在缓冲区 1 和 2 之间切换。

谢谢你。

4

2 回答 2

7

对此的一般解决方案(可以看起来)如下所示:

(defvar ignore-windows-containing-buffers-matching-res '("\\*Help")
      "List of regular expressions specifying windows to skip (if window contains buffer that matches, skip)")

(defadvice other-window (before other-window-ignore-windows-containing activate)
  "skip over windows containing buffers which match regular expressions in 'ignore-windows-containing-buffers-matching-res"
  (if (and (= 1 (ad-get-arg 0)) (interactive-p))
      (let* ((win (next-window))
             (bname (buffer-name (window-buffer win))))
        (when (some 'identity (mapcar '(lambda (re)
                                        (string-match re bname))
                                     ignore-windows-containing-buffers-matching-res))
          (ad-set-arg 0 2)))))

将变量自定义为与要跳过的缓冲区名称匹配的正则表达式。

于 2009-10-15T21:25:13.640 回答
5

Trey 的答案将完全符合您的要求(至少看起来会这样做;我还没有尝试过)。一个更通用的解决方案是使用swbuff任何一个swbuff-x或我自己的swbuff-advice. 关于这三者的信息可以在Emacs Wiki swbuff 页面上找到。

于 2009-10-16T15:20:44.373 回答