使用vimdiff替换整个文件?

22

我正在使用vimdiff进行git合并。有没有快速选择要使用的1个文件的方法?目前我只是从一个缓冲区中选择所有内容,将$MERGE替换为它,然后保存。我想我可以用宏来实现,但想知道是否有更好的方法。 谢谢!

4个回答

44

有几种方法:

:%diffput

要将当前缓冲区的所有更改“put”到“other”缓冲区中。这使三方差异处理变得容易:

:%diffput OURS

“OURS”模式将唯一匹配当前差异中涉及的缓冲区名称。

以上所有内容都可以反过来进行,用 do 或者 :diffget 进行替换。


3
我在缓冲区 #4 中有我的好版本,所以我使用了 :%diffget 4,它完美地工作了。谢谢。 - NexusRex

12

你应该看看Tim Pope的Fugitive插件。它是一个非常有用的插件。

当你在一个存在冲突的文件中运行Gdiff命令时,会打开3个文件-目标文件、合并文件和工作副本。您需要切换到要保存的文件,并执行Gwrite!来保存该文件。

有一整个Vimcast视频系列专门介绍如何使用这个插件解决合并冲突(以及其他5个关于Fugitive.vim的视频)。


我尝试过这样做,但Gdiff对我来说没有正常工作。当我打开有冲突的文件并运行Gdiff时,它找不到另外两个文件,因此我周围有两个空白缓冲区。 - mazlix
这从没发生过。让我看看能否在网上找到线索。 - e3matheus
是我自己的错误。之前我已经说过合并成功了。谢谢。 - mazlix

6
我认为 :%diffget LO:%diffget RE 是你需要的内容。
注意: 你需要在 vim 窗口的 MERGED 部分运行它。你可以使用 Ctrl+w;←/↑/→/↓ 在窗口中移动光标。

4
  1. 确保所有参与比较的缓冲区都处于diff模式(请参阅:h start-vimdiff了解如何进入diff模式)。
  2. 在Base中键入v进入VISUAL MODE。
  3. 选择整个文件(按下Page Down直到最后一页)。
  4. 键入:,然后键入diffget <buffer number/name>:ls将列出所有缓冲区,通常在vimdiff中它们从右到左编号为1-3或4(如果是三方比较))。
  5. 之后只需键入:wqa即可完成操作。

或者,在步骤0后,您可以执行:%diffget <buffer number>来获取指定缓冲区的所有更改,因为:diffget也接受范围参数(请参阅:%:diffget)。

反向操作也同样适用::%diffput <buffer>会将所有更改发送到缓冲区编号,使得两个缓冲区具有相同内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接