【问题标题】:emacs switch buffer per window每个窗口的 emacs 切换缓冲区
【发布时间】:2014-04-02 10:40:01
【问题描述】:

全部,

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

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

【问题讨论】:

    标签: emacs


    【解决方案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)))
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        相关资源
        最近更新 更多