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