Vim diff能使用patience算法吗?

14

这是一个极好的想法。我真心希望我们能得到一个完整的答案。 - Luke Maurer
3个回答

12

截至vim 8.1.0360(2018年9月),vim自带xdiff(与git用于比较的相同库),这意味着耐心差异现在原生支持vim和neovim(请参见neovim问题1466)。将以下内容添加到vimrc:

if has("patch-8.1.0360")
  set diffopt+=internal,algorithm:patience
endif

可以在Vimways ~ The power of diff找到有关新的算法:patience缩进启发式差异选项的良好介绍。


我发现这篇文章是因为我不耐烦地搜索了“更改vimdiff算法”,这是不是有点讽刺呢?嗯,莫里塞特女士? - icedwater

8
我制作了一个允许此操作的插件。请尝试我的EnhancedDiff插件。

3

查看:help diff-diffexprhttp://vimdoc.sourceforge.net/htmldoc/diff.html#diff-diffexpr

你可以将它设置为以下内容:

set diffexpr=MyDiff()
function MyDiff()
   let opt = ""
   if &diffopt =~ "iwhite"
     let opt = opt . "-w "
   endif
   silent execute "!git diff --no-index --patience " . opt . v:fname_in . " " . v:fname_new .  " > " . v:fname_out
endfunction

我尝试过这个方法,但是它并没有按照预期工作。原因是git输出的是统一的diff格式,而vim需要ed风格的格式(请查看上面的文档)。你可能需要转换git diff的输出,但那可能不是你想要的。


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