created December 18, 2002 · complexity basic · author Jens Finkhäuser · version 6.0
I like using vim's diff mode for comparing different revisions of source code files. usually older versions do not live in the directory structure with the current versions, but in a cvs repository. the command below, CVSdiff, can compare the current file to any given revision number in the cvs repository. please note that in case a revision number does not exist, empty files will be displayed, as the below script does not do any error checking (yep, i'm lazy, and this works for me). a vertical split is performed on the current file and its given previous revision.
command -nargs=1 CVSdiff silent call CVSdiff("%", "<args>") function! CVSdiff(filename, cvsversion) " append a:filename to keep extension and therefore highlighting mode let patchname = tempname() . a:filename let tempname = tempname() . a:filename let newname = tempname() . a:filename execute "!cvs diff -a -r " . a:cvsversion . " " . a:filename . " > " . patch execute "!cp " . a:filename . " " . tempname execute "!patch -R -o " . newname . " " . tempname . " < " . patchname execute "vertical diffsplit " . newname call delete(patchname) call delete(tempname) call delete(newname) endfunction
See script#58. It is very useful.
I use script#90 (cvscommand.vim).
There is a little error of this tip, and I believe it is just a typo.
execute "!cvs diff -a -r " . a:cvsversion . " " . a:filename . " > " . patch
'patch' should be corrected to 'patchname'.
It can be used as you use "cvs diff", but it spawns a vimdiff process to examine the differences.
Same idea of this tip, but I find it more handy since you usually need to review diffs during a shell session, just after "cvs update".