Not long ago, I found out about vimdiff. Basically, vim will open two files with a vertical split and highlight differences between them. You can navigate through the files and use :diffput and :diffget to synchronize blocks of the file. My programming life doesn't involve patches and version control and all that, but it is still an invaluable tool.

One place I've found it particularly useful is when upgrading ebuilds in gentoo. If your new package has a new config file in /etc, portage will not overwrite your current config, but will put the new file next to it. For example, an update to /etc/apache2/httpd.conf would be placed at /etc/apache2/._cfg0000_httpd.conf. For non-trivial updates (where etc-update/dispatch-conf aren't really practical), it's nice to be able to see the two versions side-by-side and update blocks at a time where needed.

So, not a tool I use everyday, but one that I'm very glad to have discovered. Check out the docs.