From 07de0b8d9f2925d628c6b0576081819e39c9c9ef Mon Sep 17 00:00:00 2001 From: Jiacong Fang Date: Sun, 17 Apr 2022 23:43:37 +0800 Subject: [PATCH] Add completion for revision range --- autoload/fugitive.vim | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 3ea0480701..e398bb30a7 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -2415,6 +2415,17 @@ function! s:CompleteHeads(dir) abort \ sort(s:LinesError([a:dir, 'rev-parse', '--symbolic', '--branches', '--tags', '--remotes'])[0]) endfunction +function! s:SplitRevRange(base, pat) + let index = matchend(a:base, a:pat) + if index == -1 + return ['', a:base] + endif + let pre = a:base[:index - 1] + let base = a:base[index:] + return [pre, base] + endif +endfunction + function! fugitive#CompleteObject(base, ...) abort let dir = a:0 == 1 ? a:1 : a:0 >= 3 ? a:3 : s:Dir() let tree = s:Tree(dir) @@ -2424,9 +2435,10 @@ function! fugitive#CompleteObject(base, ...) abort let subdir = strpart(cwd, len(tree) + 1) . '/' endif let base = s:Expand(a:base) + let [pre, base] = s:SplitRevRange(base, '^[^:]*\/\@= 3 ? fugitive#CompletePath(base, 0, '', dir, a:0 >= 4 ? a:4 : tree) : fugitive#CompletePath(base) + let results = map(results, 'pre . v:val') return results elseif base =~# '^:' @@ -2461,7 +2474,7 @@ function! fugitive#CompleteObject(base, ...) abort call map(entries,'s:sub(v:val,"^04.*\\zs$","/")') call map(entries,'parent.s:sub(v:val,".*\t","")') endif - return s:FilterEscape(entries, fnameescape(base)) + return map(s:FilterEscape(entries, fnameescape(base)), 'pre . v:val') endfunction function! s:CompleteSub(subcommand, A, L, P, ...) abort