截至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
和缩进启发式
差异选项的良好介绍。
查看:help diff-diffexpr
:http://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的输出,但那可能不是你想要的。