function s:OpenDiffTab(left, right) tabnew execute 'buffer' a:left diffthis execute 'rightbelow vertical sbuffer' a:right diffthis endfunction function s:FixLineendings() if !exists('b:reload_dos') && !&binary && &ff=='unix' && (0 < search('\r$', 'nc')) edit ++ff=dos echom 'fixed lineendings' let b:reload_dos = 1 endif endfunction function s:OpenMergeTabs() set columns=200 call s:OpenDiffTab(2, 4) call s:FixLineendings() setlocal noreadonly modifiable call s:OpenDiffTab(1, 4) call s:OpenDiffTab(3, 4) call s:OpenDiffTab(1, 2) call s:OpenDiffTab(1, 3) call s:OpenDiffTab(2, 3) tabfirst tabclose " turn off line formatting setlocal formatoptions= " set search pattern to conflict markers let @/ = "[<>=]\\{7}" " set last command to 'save and close' call histadd('cmd', 'w | qa') endfunction call s:OpenMergeTabs()