跳过Vim中的撤消步骤

时间:2011-04-24 21:13:32

标签: vim tree undo 3-way-merge

假设我在我的文件中处于A状态。然后我按顺序进行B,C和D的更改。

有没有办法可以保留B和D的变化,但跳过C?

或者,假设我在我的文件中处于A状态。我做出更改B,撤消它,然后进行更改C和D(因此Vim有一个带有两个分支的撤消树)。然后我改变主意,决定要使用B和D而不是C.

我怎样才能在Vim中这样做?我安装了gundo.vim插件,但我没有那么多使用它。

2 个答案:

答案 0 :(得分:2)

好吧,我会对此进行一次尝试并说:不,我认为没有办法用vim做到你想要的。

gundo.vim为vim的undo添加了一个很好的界面,但不会改变它的核心功能。所以我看一下官方的vim文档,看看是否有任何关于它是否具备此功能的提示:

没有关于将两个分支合并在一起的事情。我认为ewh和ZyX是正确的:要获得将B与D合并的一般解决方案,vim将需要

  1. Bram将其作为未来版本的单独功能添加
  2. 有人通过集成可以合并的东西(如git / hg)在插件中实现它
  3. 当然,您可以尝试通过使用版本B,C和D以及一些差异打开的文件来手动执行此操作。


    注意:如果我误解了您并且您不想了解一般解决方案并且正在寻找有关此特定实例的帮助,请告诉我,我会看到我能做些什么: )

答案 1 :(得分:1)

  

有没有办法可以保留B和D的变化,但跳过C?

你在州D.:w file.ext_D

回溯到状态C.:w file_ext_C

回溯到州B.:w file.ext_B

:!kdiff3 file.ext_B file.ext_C file.ext_D

这给出了差异的3路合并,但是你仍然必须手动进入并为每个合并冲突选择D中的每一条红线。不是一个简单的解决方案。

如果你做了

:!kdiff3 file.ext_C file.ext_B file.ext_D

然后合并自动发生(除了具有多个更改的单个行)

对于更复杂的情况,它变得更加困难。

注意:我不确定修订控制工具如何提供帮助。你基本上做的事情就是在B和D之间创建一个补丁,然后从中减去C到D的补丁。在我看来,修订控制系统通常设计用于管理不同变更源之间的合并,而不是单个分支的变更。

kdiff3位于:http://kdiff3.sourceforge.net/

相关问题