我想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)
)
)
)
)