解决与 3-way diff 的冲突时如何显示 'word-level' 变化?

How to display 'word-level' changes when resolving conflicts with 3-way diff?

解决与逃犯的矛盾很棒。看完之后 Painless Merge Conflict Resolution in Git,我开始思考如何不仅在行级而且在字级显示变化。

所有示例/案例均基于painless_git_conflicts_resolution repo. Hub用于使git clone命令更加简洁。

具有残疾diff3 冲突风格的逃犯。

hub clone ryrych/painless_git_conflicts_resolution fugitive_no_diff3 cd fugitive_no_diff3/ git checkout beta git merge origin/master vim roses.txt :Gdiff

结果如下:

问题是您只能看到所有行都以某种方式发生了变化。这个例子很短,但是你们有多少人发现第 3 行添加了 of

RubyMine 可以解决这个问题,尽管并非总是如此,但经常会给您留下差异标记,并且没有差异突出显示。虽然在这个屏幕截图上没有差异标记,但缺少 'contrast' 使得解决冲突变得非常困难。

启用 diff3 + 显示共同祖先的逃犯:

Show base in fugitive.vim conflict diff Whosebug question made me try the accepted answer,但解决方案并没有改善。

hub clone ryrych/painless_git_conflicts_resolution fugitive_with_diff3 cd fugitive_with_diff3/ git checkout beta git merge origin/master vim roses.txt :split :Gdiff [Ctrl][W][J] :Gedit :1

opendiff 作为 mergetool

hub clone ryrych/painless_git_conflicts_resolution opendiff cd opendiff/ git checkout beta git merge origin/master git mergetool

瞧!

这当然可以解决问题,但让我依赖于专为一个系统设计的外部工具。总结一下:是否有可能在 Vim 中实现与在 opendiff 中类似的东西?

我发现在我的机器 (运行 vim 7.4) 上,所有差异都突出了行内的差异。 :help view-diff 中的文字暗示这是标准行为。它没有说明打开或关闭该功能,只是 hl-DiffText 高亮组用于 "Changed text inside a Changed line"

我会尝试不同的配色方案,或者至少尝试仔细检查您当前的配色方案是否定义了 hl-DiffText

的外观

编辑:显然,给定的示例实际上对于显示单词级别的差异非常糟糕。每行在多个地方都有变化,它们非常短,并且没有任何行保持完全不变以提供上下文。正如您在屏幕截图中看到的那样,删除冲突标记会将所有 "all my base" 行放在相同的行号处,并且单词级别的差异会突出显示。您可能想尝试更复杂的 repo/merge 冲突。