From 6c19f1ddfb74b3b21f3d1e830bee1d1ed6a72ece Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Wed, 2 Feb 2022 11:53:01 -0500 Subject: [PATCH] More robut escaping of +cmd arguments Resolves: https://github.com/tpope/vim-fugitive/issues/1938 --- autoload/fugitive.vim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index e99107a..fc30676 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -5905,18 +5905,22 @@ function! s:ArgSplit(string) abort let arg = matchstr(string, '^\s*\%(\\.\|[^[:space:]]\)\+') let string = strpart(string, len(arg)) let arg = substitute(arg, '^\s\+', '', '') - call add(args, substitute(arg, '\\\@ 1 - let pre .= ' +' . escape(join(map(cmds, '"exe ".string(v:val)'), '|'), ' |"') + let pre .= ' +' . s:PlusEscape(join(map(cmds, '"exe ".string(v:val)'), '|')) elseif len(cmds) - let pre .= ' +' . escape(cmds[0], ' |"') + let pre .= ' +' . s:PlusEscape(cmds[0]) endif return [url, pre] endfunction @@ -7905,7 +7909,7 @@ function! s:GF(mode) abort endtry if len(results) > 1 let cmd = 'G' . a:mode . - \ (empty(results[1]) ? '' : ' +' . escape(results[1], ' |')) . ' ' . + \ (empty(results[1]) ? '' : ' +' . s:PlusEscape(results[1])) . ' ' . \ fnameescape(results[0]) let tail = join(map(results[2:-1], '"|" . v:val'), '') if a:mode ==# 'pedit' && len(tail)