From: Bram Moolenaar Date: Thu, 24 Dec 2020 16:15:53 +0000 (+0100) Subject: patch 8.2.2206: :exe command line completion only works for first argument X-Git-Tag: v8.2.2206 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4941b5effd7f6a26583a949c92ee50276a3b43f9;p=vim 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) --- diff --git a/src/eval.c b/src/eval.c index e4149ab9d..e61207048 100644 --- a/src/eval.c +++ b/src/eval.c @@ -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; } diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 600a571a1..1c5cac76b 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -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\\\"\", 'tx') + call assert_match('"' .. cmd .. ' SomeVar', @:) + call feedkeys(":" .. cmd .. " foo SomeV\\\"\", '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 diff --git a/src/version.c b/src/version.c index 5420862e2..adba2cd4e 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2206, /**/ 2205, /**/