Enable jumping on @@ hunk header

This commit is contained in:
Tim Pope
2015-10-06 23:03:21 -04:00
parent 01cda4d443
commit 28de2a1ddd

View File

@@ -2766,6 +2766,8 @@ function! s:cfile() abort
else else
let dcmds = []
" Index " Index
if getline('.') =~# '^\d\{6\} \x\{40\} \d\t' if getline('.') =~# '^\d\{6\} \x\{40\} \d\t'
let ref = matchstr(getline('.'),'\x\{40\}') let ref = matchstr(getline('.'),'\x\{40\}')
@@ -2847,14 +2849,21 @@ function! s:cfile() abort
endwhile endwhile
let offset += matchstr(getline(lnum), type.'\zs\d\+') let offset += matchstr(getline(lnum), type.'\zs\d\+')
let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1] let ref = getline(search('^'.type.'\{3\} [ab]/','bnW'))[4:-1]
let dcmd = offset.'|normal!zv' let dcmds = [offset, 'normal!zv']
let dref = ''
elseif getline('.') =~# '^rename from ' elseif getline('.') =~# '^rename from '
let ref = 'a/'.getline('.')[12:] let ref = 'a/'.getline('.')[12:]
elseif getline('.') =~# '^rename to ' elseif getline('.') =~# '^rename to '
let ref = 'b/'.getline('.')[10:] 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\)' 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 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\)') let ref = matchstr(getline('.'),'\Cdiff --git \%(a/.*\|/dev/null\) \zs\%(b/.*\|/dev/null\)')
@@ -2896,9 +2905,9 @@ function! s:cfile() abort
endif endif
if exists('dref') if exists('dref')
return [ref, dcmd] + (empty(dref) ? [] : [dref]) return [ref, dcmd . ' ' . s:fnameescape(dref)] + dcmds
elseif ref != "" elseif ref != ""
return [ref] return [ref] + dcmds
endif endif
endif endif
@@ -2912,10 +2921,8 @@ function! s:GF(mode) abort
catch /^fugitive:/ catch /^fugitive:/
return 'echoerr v:errmsg' return 'echoerr v:errmsg'
endtry endtry
if len(results) > 1 if len(results)
return s:Edit(a:mode, 0, results[0]).'|'.results[1].join(map(results[2:-1], '" ".s:fnameescape(v:val)'), '') return s:Edit(a:mode, 0, results[0]).join(map(results[1:-1], '"|".v:val'), '')
elseif len(results)
return s:Edit(a:mode, 0, results[0])
else else
return '' return ''
endif endif