Vim diff opens 2 files for diffing, but it doesn't navigate to the first diff section automatically on startup. Can I add something to startup script (like _vimrc) to do this?
2 Answers
]c
doesn't jump to the first difference, it jumps to the next difference. If your first difference is on the first line, ]c
would jump to the the second one which is not what you want. One could work around that with ]c[c
(jump to next difference then jump to previous).
This command:
$ vim -d -c 'norm ]c[c' filea fileb
seems to do what you want.
I don't think it is necessarily a good idea to put that in your startup sciript.
-
1You could put that as an autocommand only when
'diff'
is on, I suppose. That seems harmless enough...:help vimdiff
gives an example of how (if &diff
)– derobertJun 9, 2015 at 17:21
Yes, building on @romainl's answer:
if &diff
" Jump to next change, then prev change. This puts us on the first change
" even if it is on line 1.
autocmd VimEnter * normal! ]c[c
endif
This needs to be on VimEnter
(I'm not sure why neither BufReadPost
or BufEnter
work, maybe someone else knows?) I used the script linked in this answer to determine the earliest event that will work correctly.
You can also add other diff-only mappings in the same block:
" Jump to next change after getting or putting a chunk
nnoremap do <Cmd>diffget<CR>]c
nnoremap dp <Cmd>diffput<CR>]c
]c
does.