vim diff可以使用耐心算法吗?

时间:2014-02-11 17:28:02

标签: git vim diff

有没有办法将vimdiff的差异策略设置为耐心算法?它内置于git中,似乎比普通的差异要好得多。

供参考:

3 个答案:

答案 0 :(得分:6)

我做了一个允许这个的插件。试试我的EnhancedDiff插件

答案 1 :(得分:2)

请参阅: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样式格式(参见上面的doc)。您可能必须转换git diff的输出,这可能不是您想要的。

答案 2 :(得分:2)

vim 8.1.0360(2018年9月)开始,vim附带了xdiff(git用于diffs的同一库),这意味着vim和neovim现在原生支持耐心diff(参见{{3 }}。将此添加到您的vimrc:

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

可以在neovim issue 1466上找到新的algorithm:patienceindent-heuristic差异选项的精彩介绍。