每个窗口的emacs开关缓冲区

Jan*_*osH 5 emacs

所有,

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

感谢任何建议,Janos

jua*_*eon 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)))
Run Code Online (Sandbox Code Playgroud)