Example commands when using vimdiff, in order to compare files, or merge them. Note that on Linux, vimdiff might be the default tool when running into a merge conflict, so it can be handy to know a few commands here.
And remember, you can use your usual vim commands.
Commands
Navigation
CTRL+ww - navigate between windows :qa - quit all windows at once :only - quit all windows but the once you're in :cq - quit (when all goes terribly wrong!) ]c - next difference [c - previous difference :bnext - open previously closed windows :bprev - open previously closed windows
View
zo - open folded text zc - close folded text zR - unfold all lines zM - fold all lines :diffupdate - re-scan the files for differences
Merge
do - diff obtain - cannot be used with range or >2 windows
:diffget 2 - diff get (obtain), from 2nd window
:2,4diffget - diff get (obtain), certain range
if line does not exist in your buffer, place below to obtain
dp - diff put - cannot be used with range or >2 windows
:diffput 3 - diff put, use 3rd buffer
:diffput RE - diff put, use the buffer which matches "RE" (e.g., "file.c.RE")
If things go terribly wrong
:cq - abort and exit Vim with an error code :u - undo the latest change in the current window
For example when merging in Mercurial: Quit Vim via :cq. It won’t save, and it will return an error code, so Mercurial will not consider the file merged yet, and you can try again via hg resolve filename (hg resolve -l to see list of files, in case you get really confused).
Further Reading
* RTFM: vimdiff
* Use vimdiff as git mergetool
* vim / vimdiff cheatsheet
* Mercurial: Merging with Vim