每个窗口的emacs开关缓冲区

时间:2014-04-02 10:40:02

标签: emacs

所有

我正在寻找一种方法来在多个窗口中切换缓冲区,类似于其他IDE。让我们说我将我的框架分成两个窗口(C-x 3)。我想在左侧窗口中处理.c files的缓冲区,在右侧窗口处理.h files。我正在寻找一种方法将缓冲区列表耦合到特定窗口,并循环缓冲区仅属于当前窗口。因此,如果我正在编辑右侧的.h file,并按下一个组合键,我会得到下一个.h file

感谢您的任何建议, 亚诺什

2 个答案:

答案 0 :(得分:1)

您可以使用ff-find-other-file。带前缀参数 C-u ,它会打开另一个窗口。

至于你获取下一个.h文件的想法,你只是限制 尝试将IDE中的坏主意带入Emacs。 使用projectileido-switch-bufferhelm-buffers-list:这些 工具可以一次管理数百个文件,而“获取下一个文件”的方法 (即标签)在20左右失败。

答案 1 :(得分:1)

我使用buffer-stack(可通过MELPA获得)来做类似的事情。 buffer-stack允许您以非常灵活的方式在缓冲区之间循环(它记住您最近使用的缓冲区,并且每帧使用单独的堆栈)。

您可以为缓冲切换命令添加过滤功能。因此,您可以添加一个过滤器函数,仅考虑文件名扩展名与当前文件名相同的缓冲区。我使用过滤功能在相同模式的缓冲区之间切换。这是一个示例,显示我的键绑定按当前模式切换过滤,并切换到直接缓冲区。根据文件扩展名添加另一个过滤器很容易:

(defmacro command (&rest body)
  `(lambda ()
     (interactive)
     ,@body))

(defvar buffer-stack-mode)

(defun buffer-op-by-mode (op &optional mode)
  (let ((buffer-stack-filter 'buffer-stack-filter-by-mode)
        (buffer-stack-mode (or mode major-mode)))
    (funcall op)))

(defun buffer-stack-filter-by-mode (buffer)
  (with-current-buffer buffer
    (equal major-mode buffer-stack-mode)))

(global-set-key [(meta kp-7)]
                (command (buffer-op-by-mode 'buffer-stack-up)))
(global-set-key [(meta kp-9)]
                (command (buffer-op-by-mode 'buffer-stack-down)))
(global-set-key [(meta kp-3)]
                (command (buffer-op-by-mode 'buffer-stack-down 'dired-mode)))
(global-set-key [(meta kp-1)]
                (command (buffer-op-by-mode 'buffer-stack-up 'dired-mode)))