commit 28de2a1ddd41d6fb77d32550c6b07f91b6f2dfbe (tree)
parent 01cda4d4432cbec9c580411d6afce2b0d1899439
Author: Tim Pope <code@tpope.net>
Date: Tue, 6 Oct 2015 23:03:21 -0400
Enable jumping on @@ hunk header
Diffstat:
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
@@ -2766,6 +2766,8 @@ function! s:cfile() abort
else
+ let dcmds = []
+
" Index
if getline('.') =~# '^\d\{6\} \x\{40\} \d\t'
let ref = matchstr(getline('.'),'\x\{40\}')
@@ -2847,14 +2849,21 @@ function! s:cfile() abort
endwhile
let offset += matchstr(getline(lnum), type.'\zs\d\+')
let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1]
- let dcmd = offset.'|normal!zv'
- let dref = ''
+ let dcmds = [offset, 'normal!zv']
elseif getline('.') =~# '^rename from '
let ref = 'a/'.getline('.')[12:]
elseif getline('.') =~# '^rename to '
let ref = 'b/'.getline('.')[10:]
+ elseif getline('.') =~# '^@@ -\d\+,\d\+ +\d\+,'
+ let diff = getline(search('^diff --git \%(a/.*\|/dev/null\) \%(b/.*\|/dev/null\)', 'bcnW'))
+ let offset = matchstr(getline('.'), '+\zs\d\+')
+
+ let dref = matchstr(diff, '\Cdiff --git \zs\%(a/.*\|/dev/null\)\ze \%(b/.*\|/dev/null\)')
+ let ref = matchstr(diff, '\Cdiff --git \%(a/.*\|/dev/null\) \zs\%(b/.*\|/dev/null\)')
+ let dcmd = 'Gdiff! +'.offset
+
elseif getline('.') =~# '^diff --git \%(a/.*\|/dev/null\) \%(b/.*\|/dev/null\)'
let dref = matchstr(getline('.'),'\Cdiff --git \zs\%(a/.*\|/dev/null\)\ze \%(b/.*\|/dev/null\)')
let ref = matchstr(getline('.'),'\Cdiff --git \%(a/.*\|/dev/null\) \zs\%(b/.*\|/dev/null\)')
@@ -2896,9 +2905,9 @@ function! s:cfile() abort
endif
if exists('dref')
- return [ref, dcmd] + (empty(dref) ? [] : [dref])
+ return [ref, dcmd . ' ' . s:fnameescape(dref)] + dcmds
elseif ref != ""
- return [ref]
+ return [ref] + dcmds
endif
endif
@@ -2912,10 +2921,8 @@ function! s:GF(mode) abort
catch /^fugitive:/
return 'echoerr v:errmsg'
endtry
- if len(results) > 1
- return s:Edit(a:mode, 0, results[0]).'|'.results[1].join(map(results[2:-1], '" ".s:fnameescape(v:val)'), '')
- elseif len(results)
- return s:Edit(a:mode, 0, results[0])
+ if len(results)
+ return s:Edit(a:mode, 0, results[0]).join(map(results[1:-1], '"|".v:val'), '')
else
return ''
endif