Use plain Vim to merge conflicts
plain Vim to merge conflicts :vim:en:
I will explain how to resolve code merge conflicts with plain vim. The only third party plugin required is vim-unimpaired.
The reason to use vim is that I can't use vimdiff as a merge tool for certain VCS (CVS, Subversion, Perforce, …).
A typical file in conflict is like:
hello world hello world <<<<<<< .mine This is fun stuff! ======= This is a documentation file >>>>>>> .r6 bye world bye world
Let's call lines like ">>>>>>>", "<<<<<<<" and "
=====" conflict markers.
Resolving conflicts is the operation of picking up either or both of the sections between markers.
Basic knowledge of Vim
- "]n" move the focus to the next marker and "[n" to the previous marker.
- "dd" delete current line
- "d]n" delete from current line to the next marker (next marker exclusive)
Our workflow is actually simple:
- Step 1, find the next marker by pressing "]n"
- Step 2, "]nd]n[ndd[ndd" to pick up the section 1
- Step 3, "d]ndd]ndd" to pick up the section 2, go to step 1
This workflow is compatible with any version control software.
Optionally you can set the shortcut for step 2 and step 3:
map <leader>dg1 ]nd]n[ndd[ndd map <leader>dg2 d]ndd]ndd