# HG changeset patch # User Bram Moolenaar # Date 1597958103 -7200 # Node ID 1ebcce655dd343d02b0760c798414e8bbc308952 # Parent bcb274fbcd617e16d03ce82f6b1a7d0cc58fae62 patch 8.2.1500: Vim9: error when using address without a command Commit: https://github.com/vim/vim/commit/5d72ce69c8783fd8f1a0355c00806c5084010eec Author: Bram Moolenaar Date: Thu Aug 20 23:04:06 2020 +0200 patch 8.2.1500: Vim9: error when using address without a command Problem: Vim9: error when using address without a command. Solution: Execute the range itself. (closes https://github.com/vim/vim/issues/6747) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -10,6 +10,13 @@ def Test_syntax() let other: list = ['asdf'] enddef +def Test_range_only() + new + setline(1, ['blah', 'Blah']) + :/Blah/ + assert_equal(2, getcurpos()[1]) +enddef + let s:appendToMe = 'xxx' let s:addToMe = 111 let g:existing = 'yes' diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1500, +/**/ 1499, /**/ 1498, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6661,10 +6661,22 @@ compile_def_function(ufunc_T *ufunc, int if (*cmd != '\'' || starts_with_colon) { ea.cmd = skip_range(ea.cmd, NULL); - if (ea.cmd > cmd && !starts_with_colon) + if (ea.cmd > cmd) { - emsg(_(e_colon_required_before_a_range)); - goto erret; + if (!starts_with_colon) + { + emsg(_(e_colon_required_before_a_range)); + goto erret; + } + if (ends_excmd2(line, ea.cmd)) + { + // A range without a command: jump to the line. + // TODO: compile to a more efficient command, possibly + // calling parse_cmd_address(). + ea.cmdidx = CMD_SIZE; + line = compile_exec(line, &ea, &cctx); + goto nextline; + } } } p = find_ex_command(&ea, NULL, starts_with_colon ? NULL @@ -6845,6 +6857,7 @@ compile_def_function(ufunc_T *ufunc, int line = compile_exec(line, &ea, &cctx); break; } +nextline: if (line == NULL) goto erret; line = skipwhite(line);