Vim Tips Wiki

Selecting changes in diff mode

1,624pages on
this wiki
Add New Page
Talk0 Share
Tip 1058 Printable Monobook Previous Next

created 2005 · complexity intermediate · author Kartik Agaram · version 6.0

This tip is for when you are working with a two-window vertical diff (comparing two files, side-by-side).

Use ]c and [c to go to a specific change. Then use M-, and M-. to patch using the version on the left or right respectively. The cursor is then positioned in the file that changed for ease of saving, etc.

I find this more intuitive than using diffput and diffget because I no longer need to remember which window the cursor is in.

The code:

function! DiffTake(dir, oppdir)
  let l:old = winnr()
  exec "wincmd ".a:dir
  " Assumption: just 2 windows side by side.
  if (winnr() == l:old)
    exec "wincmd ".a:oppdir
    wincmd p

function! SetupDiffMappings()
  if &diff
    map <Esc>, :call DiffTake("h", "l")<CR>
    map <Esc>. :call DiffTake("l", "h")<CR>

" vim -d
call SetupDiffMappings()
" Entering diff mode from within vim - diffsplit, etc.
autocmd FilterWritePost * call SetupDiffMappings()


You might also like these settings (but it will require a little savy on keeping which side is which):

" <F11> moves to "previous" change location,
" <F12> moves to "next" change location,
map <F11> [c
map <F12> ]c

" SHIFT<F12> does a "diff put" change location,
map <S-F12> dp

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random Wiki