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


28

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


您可以在不同的窗口中显示相同的缓冲区。这不是解决这个问题的方法吗?
汤姆(Tom)

Answers:


35

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

您可以创建一个间接缓冲区,该缓冲区具有自己的点,标记,模式等,但与原始缓冲区的内容相同(并且将两个缓冲区中的任何一个写入到同一文件中)。要创建第二个缓冲区,它是当前缓冲区的副本,请运行M-x clone-indirect-buffer RET。要在其他窗口中打开第二个缓冲区,可以键入C-x 4 c


3
为了澄清:C-x 4 crun clone-indirect-buffer-other-window,因此将使用它代替clone-indirect-buffer,而不遵循该命令。但是,在我的系统上,这两个命令似乎执行相同的操作。
SabreWolfy 2012年

我希望我能弄清楚如何记住这一点:-/
pedz

@pedz C-x 4是Windows的前缀,cclone的前缀。如果愿意,可以定义其他绑定。C-x c在默认配置中未使用,如果您不担心意外击中,则可以使用该选项C-x C-c。我定义C-x 5 c了在我的init文件中克隆一个新框架。
吉尔(Gilles)'所以

8

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

ctrl+ x2(水平分割)

要么

ctrl+ x3(垂直分割)

然后,您可以在同一个文件上独立滚动它们,也可以在其中一个文件中打开另一个缓冲区。

返回单一视图类型

ctrl+ x1

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


kes!您不应该在帧之间包括键盘导航吗?在每个“框架”中的可见“窗口”中C-x o运行other-window并循环。(使用emacs配置,其中窗口管理器窗口称为框架,其中的单独面板称为窗口(我知道,我知道,但我对此不负责)。)
dmckee 2011年

我倾向于使用鼠标。
Matt H

1

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)
                   )
                 )
               )
            )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.