The MyDiff() function that comes with the standard vim installation (as of 6.4) does not handle diffs very well (or indeed at all). Here is an example of a MyDiff() function that works perfectly well.
if has('win32') set diffexpr=MyDiff() function! MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif if &sh =~ '\<cmd' silent execute '!""' . $VIM. '\vim64\diff.exe" ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . '"' else silent execute '!'.$VIM.'\vim64\diff.exe" ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 endif endfunction endif