Vim Tips Wiki
(Some clean up)
Line 43: Line 43:
   
 
== Comments ==
 
== Comments ==
  +
Some time ago I wrote ftplugin which does exactly that. It can jump exactly to the place where you have been looking at the diff. It supports unified diffs only so far. It supports mercurials a/file b/file. http://www.vim.org/scripts/script.php?script_id=1888
 
<!-- parsed by vimtips.py in 0.627197 seconds-->
 
<!-- parsed by vimtips.py in 0.627197 seconds-->

Revision as of 12:36, 31 October 2007

Previous TipNext Tip

Tip: #492 - Jump to file from CVSDiff output

Created: June 24, 2003 2:07 Complexity: basic Author: daniel kullmann Version: 5.7 Karma: 1/1 Imported from: Tip#492

I use :CVSDiff from cvscommand.vim quite often to get an overview of the changes i made to a file.

I always want to jump from the diff to the corresponding line in the original file.

So I wrote a small script that does that, and put it in .vim/after/ftplugin/diff.vim

Pressing <Return> will execute that script.

function! DiffJumpToFile()
    let a=line(".") " current line number
    let b=search("^\\(---\\|\\*\\*\\*\\) ", "b") " search for line like *** 478,489 ***
    let c=getline(b) " get this line as string
    let d=strpart(c, 4, match(c, ",")-4) " get the first line number (478) from that string

    let f=search("^\\(---\\|\\*\\*\\*\\) .*\\t", "b") " search for line like *** fileincvs.c ....
    let g=getline(f) " get this line as string
    let h=match (g, "\\t", 4) " look for end of filename (terminated by tab) in string
    let i=strpart(g, 4, h-4) " get the filename

    execute ":b " . i | " change to that file
    execute "normal " . (d+a-b-1) . "G" | " go to right line number
endfunction

nmap <buffer> <Return> :call DiffJumpToFile()<CR>

I didn't put that script in the script section because it doesn't have any error checking at all.

For the reverse operation (get a diff for the current buffer), see VimTip1030.

Comments

Some time ago I wrote ftplugin which does exactly that. It can jump exactly to the place where you have been looking at the diff. It supports unified diffs only so far. It supports mercurials a/file b/file. http://www.vim.org/scripts/script.php?script_id=1888