patch 8.2.2206: :exe command line completion only works for first argument

Problem:    :exe command line completion only works for first argument.
Solution:   Skip over text if more is following. (closes #7546)
This commit is contained in:
Bram Moolenaar
2020-12-24 17:15:53 +01:00
parent 6dd41b1d57
commit 4941b5effd
3 changed files with 31 additions and 0 deletions

View File

@ -1904,6 +1904,24 @@ set_context_for_expression(
while ((c = *++arg) != NUL && (c == ' ' || c == '\t'))
/* skip */ ;
}
// ":exe one two" completes "two"
if ((cmdidx == CMD_execute
|| cmdidx == CMD_echo
|| cmdidx == CMD_echon
|| cmdidx == CMD_echomsg)
&& xp->xp_context == EXPAND_EXPRESSION)
{
for (;;)
{
char_u *n = skiptowhite(arg);
if (n == arg || IS_WHITE_OR_NUL(*skipwhite(n)))
break;
arg = skipwhite(n);
}
}
xp->xp_pattern = arg;
}

View File

@ -673,6 +673,17 @@ func Test_cmdline_complete_env_variable()
unlet $X_VIM_TEST_COMPLETE_ENV
endfunc
func Test_cmdline_complete_expression()
let g:SomeVar = 'blah'
for cmd in ['exe', 'echo', 'echon', 'echomsg']
call feedkeys(":" .. cmd .. " SomeV\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"' .. cmd .. ' SomeVar', @:)
call feedkeys(":" .. cmd .. " foo SomeV\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_match('"' .. cmd .. ' foo SomeVar', @:)
endfor
unlet g:SomeVar
endfunc
" Test for various command-line completion
func Test_cmdline_complete_various()
" completion for a command starting with a comment

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2206,
/**/
2205,
/**/