History
Article Edit this page Discussion

Jump to file from CVSDiff output

From Vim Tips Wiki

(Redirected from VimTip492)
Jump to: navigation, search

Tip 492 Previous Next Created: June 24, 2003 Complexity: basic Author: daniel kullmann Version: 5.7


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 Enter 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> <CR> :call DiffJumpToFile()<CR>

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

[edit] 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


Rate this article:

Share this article:

Hubs Highlights International Sites Wikia messages
Entertainment
Gaming
Cartoons & Comics
Science Fiction
Hobbies
Sports
See all...
Grand Theft Auto
Doctor Who
Legend of Zelda Wiki
Terminator Wiki
Everquest II Wiki
Mystery Science Theater 3000
German
Spanish
Chinese
Japanese
More...
Wikia is hiring for several open positions
Send this article to a friend
"Jump to file from CVSDiff output"
 
 
Hi!

I thought you'd like this page from Wikia!

http://vim.wikia.com

Come check it out!
Send confirmation