Say I get a patch created with
vimdiff a b
Given your references to Vim in the question, I'm not sure if this is the answer you want :) but Emacs can do this. Open the file containing the diff, make sure that you're in
diff-mode (if the file is named
foo.patch this happens automatically; otherwise type M-x
diff-mode RET), go to the hunk you are interested in and hit C-c C-b for
refine-hunk. Or step through the file one hunk at a time with M-n; that will do the refining automatically.