Emacs 打开文件的多个实例-

Emacs 打开文件的多个实例-,emacs,Emacs,如何在Emacs中打开多个不同的文件实例?也就是说,这些实例彼此完全独立,但写入同一个文件 我实际上希望在一个缓冲区中有一个对原始文件的引用,在引用原始内容的同时,我将在其中进行编辑。我不认为打开一个临时缓冲区,将整个原始内容拉入其中,并将其并排放置,这是一个优雅的解决方案 也欢迎其他解决方案 我尝试过使用克隆间接缓冲区和C-xc-v,但它没有达到这个目的。您可以创建一个新缓冲区(C-xb*new*),并使用C-xi文件名将文件内容插入其中。您可以创建一个新缓冲区(C-xb*new*)然后使用C

如何在Emacs中打开多个不同的文件实例?也就是说,这些实例彼此完全独立,但写入同一个文件

我实际上希望在一个缓冲区中有一个对原始文件的引用,在引用原始内容的同时,我将在其中进行编辑。我不认为打开一个临时缓冲区,将整个原始内容拉入其中,并将其并排放置,这是一个优雅的解决方案

也欢迎其他解决方案


我尝试过使用
克隆间接缓冲区
和C-xc-v,但它没有达到这个目的。

您可以创建一个新缓冲区(C-xb
*new*
),并使用C-xi
文件名
将文件内容插入其中。您可以创建一个新缓冲区(C-xb
*new*
)然后使用C-xi
文件名将文件内容插入到文件中

根据您的模式,您可能会有幸使用
克隆缓冲区
。它有一定的局限性,你可以在文档中阅读

否则,这里有一些又快又脏的东西:

(取消可疑克隆缓冲区()
“克隆当前缓冲区。克隆将写入原始文件。”
(互动)
(切换到缓冲区其他窗口
(eval`(使用当前缓冲区)
;创建新缓冲区或清除现有缓冲区。
(获取缓冲区创建,(格式“*克隆:%s*”(缓冲区名称)))
(删除区域(点最小值)(点最大值))
(插入,(缓冲字符串))
(setq缓冲区文件名,(缓冲区文件名))
(funcall',主模式)
(当前缓冲区‘‘‘‘)

根据您的模式,您可能会幸运地使用
克隆缓冲区。它有一定的局限性,你可以在文档中阅读

否则,这里有一些又快又脏的东西:

(取消可疑克隆缓冲区()
“克隆当前缓冲区。克隆将写入原始文件。”
(互动)
(切换到缓冲区其他窗口
(eval`(使用当前缓冲区)
;创建新缓冲区或清除现有缓冲区。
(获取缓冲区创建,(格式“*克隆:%s*”(缓冲区名称)))
(删除区域(点最小值)(点最大值))
(插入,(缓冲字符串))
(setq缓冲区文件名,(缓冲区文件名))
(funcall',主模式)
(当前缓冲区‘‘‘‘)

当我阅读
查找文件
代码时,我看到了编码在其中的警告:

"The file %s is already visited normally.
You have asked to visit it literally,
meaning no coding system decoding, format conversion, or local variables.
But Emacs can only visit a file in one way at a time.

Do you want to revisit the file literally now? "
这意味着Emacs的代码特别试图防止同一文件被多次访问,但缓冲区彼此不同步的情况。然而。。。您可以打开Emacs的两个副本,在这种情况下,它们不知道彼此访问同一个文件,因此允许出现这种情况

我可以理解,上面的选项不是一个很好的选择,但是添加这种功能似乎需要一些时间来理解它被特别阻止的原因

我试过这个:

M-:
(切换到buffer(find-file-noselect-1(创建文件缓冲区(缓冲区文件名))(缓冲区文件名)t nil(缓冲区文件名)1))


这似乎是可行的,但我不确定其后果——可能不同的主要模式可能依赖于原始的Emacs文件处理和它们的编辑历史,所以请小心使用。最后一个数字
1
是文件名后显示的数字,如
Foo.bar
中所示,因此,如果需要更多副本,您需要更改该数字。

当我阅读
查找文件
代码时,我看到该文件中编码了以下警告:

"The file %s is already visited normally.
You have asked to visit it literally,
meaning no coding system decoding, format conversion, or local variables.
But Emacs can only visit a file in one way at a time.

Do you want to revisit the file literally now? "
这意味着Emacs的代码特别试图防止同一文件被多次访问,但缓冲区彼此不同步的情况。然而。。。您可以打开Emacs的两个副本,在这种情况下,它们不知道彼此访问同一个文件,因此允许出现这种情况

我可以理解,上面的选项不是一个很好的选择,但是添加这种功能似乎需要一些时间来理解它被特别阻止的原因

我试过这个:

M-:
(切换到buffer(find-file-noselect-1(创建文件缓冲区(缓冲区文件名))(缓冲区文件名)t nil(缓冲区文件名)1))


这似乎是可行的,但我不确定其后果——可能不同的主要模式可能依赖于原始的Emacs文件处理和它们的编辑历史,所以请小心使用。最后一个数字
1
是文件名后显示的数字,如
Foo.bar
中所示,因此,如果需要更多副本,您需要更改该数字。

如前所述,您可能可以使用
克隆缓冲区
,尽管您必须让bind
buffer file name
围绕调用,因为
clone buffer
否则将拒绝克隆它。另一个选择是:

M-x set-visited-file-name RET toto RET
C-x C-f thefile RET
C-x b RET
M-x set-visited-file-name RET thefile RET

最后一个
设置访问的文件名
应该询问您是否确实想这样做,但您可以回答您确实想这样做,Emacs将接受您的选择。可以说,
clone buffer
不应该拒绝这样做,因此您可能希望提交一份bug报告,要求它的行为与
set visted file name
的行为类似。

如前所述,您可能能够使用
clone buffer
,尽管您必须让bind
buffer file name
围绕调用,因为
clone buffer
否则将拒绝克隆它。另一个选择是:

M-x set-visited-file-name RET toto RET
C-x C-f thefile RET
C-x b RET
M-x set-visited-file-name RET thefile RET
最后一个
设置访问的文件名
应该询问您是否确实想这样做,但您可以回答您确实想这样做,Emacs将接受您的选择。可以说,
clone buffer
不应该拒绝这样做,所以您可能希望提交一份bug报告,要求它的行为与wh类似