diff --git a/src/eval.c b/src/eval.c index e4149ab9d2..e61207048c 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 600a571a17..1c5cac76bf 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 5420862e2c..adba2cd4e2 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, /**/