假设我在文档中处于状态 A。然后我进行更改 B、C 和 D(按顺序)。
有没有办法可以保留更改 B 和 D,但跳过 C?
或者,假设我在文档中处于状态 A。我进行更改 B,撤消它,然后进行更改 C 和 D(所以 Vim 有一个带有两个分支的撤消树)。然后我改变主意并决定我想使用 B 和 D 而不是 C。
我怎样才能在 Vim 中做到这一点?我已经gundo.vim
安装了插件,但我没有用过那么多。
假设我在文档中处于状态 A。然后我进行更改 B、C 和 D(按顺序)。
有没有办法可以保留更改 B 和 D,但跳过 C?
或者,假设我在文档中处于状态 A。我进行更改 B,撤消它,然后进行更改 C 和 D(所以 Vim 有一个带有两个分支的撤消树)。然后我改变主意并决定我想使用 B 和 D 而不是 C。
我怎样才能在 Vim 中做到这一点?我已经gundo.vim
安装了插件,但我没有用过那么多。
好吧,我会试一试,然后说:不,我认为没有办法用 vim 完全按照您的意愿行事。
gundo.vim
为 vim 的 undo 添加了一个不错的接口,但不会改变它的核心功能。所以我查看了官方的 vim 文档,看看是否有任何暗示它是否能够做到这一点:
没有什么关于将两个分支合并在一起的。我认为 ewh 和 ZyX 是对的:要获得将 B 与 D 合并的通用解决方案,vim 需要
您当然可以尝试通过打开具有版本 B、C 和 D 的文件以及一些差异来手动执行此操作。
注意:如果我误解了,并且您不知道通用解决方案并且正在寻求有关此特定实例的帮助,请告诉我,我会看看我能做些什么:)
有没有办法可以保留更改 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/