在emacs中的两个不同的缓冲区中编辑一个文件

在emacs中的两个不同的缓冲区中编辑一个文件

我想foo.bar在 emacs 中打开文件两次(或更多次),这样我就可以同时编辑它的两个不同部分。可以吗?可能更好的问题是,怎么做?有没有办法在自己的缓冲区/框架中打开每个实例?

答案1

您可以在多个窗口中打开同一个缓冲区(可以分布在不同的框架中),但这不太方便。每个窗口都有自己的点,但它们都共享标记、文件模式、缩小和其他特性,因为除了点之外,几乎所有特性都与缓冲区相关。此外,如果您碰巧在一个窗口中访问另一个缓冲区,您将丢失文件中的位置。

您可以制作间接缓冲区它有自己的点、标记、模式等,但内容与原始缓冲区相同(并将任一缓冲区写入保存到同一文件)。要创建第二个缓冲区(即当前缓冲区的克隆),请运行M-x clone-indirect-buffer RET。要在另一个窗口中打开第二个缓冲区,您可以键入C-x 4 c

答案2

分屏模式:其中ctrl+x表示按住 ctrl 键并输入 x。然后输入后面的数字。

ctrl+ x2(水平分割)

或者

ctrl+ x3(垂直分割)

然后,您可以在同一个文件上独立滚动它们,或者在其中一个文件中打开另一个缓冲区(如果您愿意)。

返回单个视图类型

ctrl+ x1

如果您愿意,您可以根据需要多次分割每个屏幕(部分)。首先选择要分割的屏幕,然后对其进行水平或垂直分割。

答案3

Emacs 偏向于窗格(窗口),而不是框架。通常希望在另一个框架中打开同一个缓冲区,而不仅仅是同一框架中的另一个窗口。但C-x 5 c默认情况下不受约束。此代码定义了缺失的clone-indirect-buffer-other-frame函数:

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )

相关内容