Emacs如何实现每个窗口切换缓冲区

5

大家好,

我正在寻找一种类似其他IDE的“在多个窗口中切换缓冲区”的方法。比如说,我将框架分割成两个窗口(C-x 3)。我想让.c文件的缓冲区总是在左侧窗口,而.h文件的缓冲区在右侧。我正在寻找一种将缓冲区列表连接到特定窗口并仅循环属于当前窗口的缓冲区的方法。因此,如果我正在编辑右侧的.h文件,并按下一个键组合,则会获得下一个.h文件。

谢谢任何建议, Janos

2个回答

1
你可以使用ff-find-other-file。使用前缀参数C-u,它将打开另一个窗口。
至于你获取下一个.h文件的想法,你只是试图把从IDE中带来的坏主意限制在Emacs中。 使用projectileido-switch-bufferhelm-buffers-list:这些工具可以管理数百个文件,而“获取下一个文件”的方法(即选项卡)在大约20个文件左右失败。

1
我使用buffer-stack(通过MELPA可用)来实现类似的功能。 buffer-stack允许您以非常灵活的方式在缓冲区之间循环(它记住您最近使用的缓冲区,并使用每个框架的单独堆栈)。
您可以为缓冲区切换命令添加过滤函数。因此,您可以添加一个仅考虑与当前文件扩展名相同的文件名的缓冲区的过滤函数。我使用一个过滤函数在相同模式的缓冲区之间切换。以下是一个示例,显示了我的按键绑定以按当前模式进行过滤并切换到dired缓冲区。很容易添加基于文件扩展名的另一个过滤器:
(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)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接