Skip to content

Instantly share code, notes, and snippets.

@fdobad
Forked from mattratleph/vimdiff.md
Last active May 20, 2023 22:38
Show Gist options
  • Save fdobad/819b0ae41b6c2d6467843519b10406c7 to your computer and use it in GitHub Desktop.
Save fdobad/819b0ae41b6c2d6467843519b10406c7 to your computer and use it in GitHub Desktop.
vim diff & mergetool cheat sheet

vim diff & mergetool cheat sheet

  1. git merge tool
  2. regular diff files

Git Merge Tool

TL;DR

Initiate merge as

git mergetool --tool=vimdiff

In normal mode

]c          " next difference
[c          " previous difference

.vimrc mapping

" mergetools
if &diff
  map <leader>1 :diffget LOCAL<CR>
  map <leader>2 :diffget BASE<CR>
  map <leader>3 :diffget REMOTE<CR>
endif

Explanation

In the middle file (future merged file), you can navigate between conflicts with ]c and [c.

Choose which version you want to keep with :diffget //2 or :diffget //3 (the //2 and //3 are unique identifiers for the target/master copy and the merge/branch copy file names).

:diffupdate (to remove leftover spacing issues)
:only (once you’re done reviewing all conflicts, this shows only the middle/merged file)
:wq (save and quit)
git add .
git commit -m “Merge resolved”

If you were trying to do a git pull when you ran into merge conflicts, type git rebase –continue.

Refs

https://www.git-scm.com/docs/git-mergetool#_backend_specific_hints

Regular diff files

Initiate from terminal

$ vimdiff file1 file2

Initiate within

:tabe file1
:vs file2
:windo diffthis
:diffo           "stop

Mappings

]c          - next difference
[c          - previous difference
do          - diff obtain
dp          - diff put
zo          - open folded text
zc          - close folded text
:diffupdate - re-scan the files for differences
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment