Can vim diff use the patience algorithm?
I made a plugin that allows this. Try my EnhancedDiff plugin
As of vim 8.1.0360 (Sep 2018), vim ships with xdiff (the same library that git uses for diffs), meaning patience diff is now natively supported in vim and neovim (see neovim issue 1466). Add this to your vimrc:
if has("patch-8.1.0360")
set diffopt+=internal,algorithm:patience
endif
A nice introduction to both the new algorithm:patience
and indent-heuristic
diff options can be found at Vimways ~ The power of diff.
see :help diff-diffexpr
: http://vimdoc.sourceforge.net/htmldoc/diff.html#diff-diffexpr
you might be able to set it to something like
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
I tried this, but I did not get it to work as git outputs unified diff format, while vim expects ed style format (see doc above). You might have to transform the output of git diff, which is probably not what you want.