1
0
forked from aniani/vim

patch 8.2.0306: Vim9: :substitute(pat(repl does not work in Vim9 script

Problem:    Vim9: :substitute(pat(repl does not work in Vim9 script.
Solution:   Remember starting with a colon. (closes #5676)
This commit is contained in:
Bram Moolenaar
2020-02-23 14:35:01 +01:00
parent 8040a7147f
commit 83f37b9142
3 changed files with 22 additions and 1 deletions

View File

@@ -1647,6 +1647,9 @@ do_one_cmd(
int save_reg_executing = reg_executing; int save_reg_executing = reg_executing;
int ni; // set when Not Implemented int ni; // set when Not Implemented
char_u *cmd; char_u *cmd;
#ifdef FEAT_EVAL
int starts_with_colon;
#endif
vim_memset(&ea, 0, sizeof(ea)); vim_memset(&ea, 0, sizeof(ea));
ea.line1 = 1; ea.line1 = 1;
@@ -1689,6 +1692,7 @@ do_one_cmd(
ea.cookie = cookie; ea.cookie = cookie;
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
ea.cstack = cstack; ea.cstack = cstack;
starts_with_colon = *skipwhite(ea.cmd) == ':';
#endif #endif
if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL) if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
goto doend; goto doend;
@@ -1713,7 +1717,7 @@ do_one_cmd(
ea.cmd = skipwhite(ea.cmd + 1); ea.cmd = skipwhite(ea.cmd + 1);
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9) if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && !starts_with_colon)
p = find_ex_command(&ea, NULL, lookup_scriptvar, NULL); p = find_ex_command(&ea, NULL, lookup_scriptvar, NULL);
else else
#endif #endif

View File

@@ -580,6 +580,21 @@ def Test_substitute_cmd()
setline(1, 'something') setline(1, 'something')
:substitute(some(other( :substitute(some(other(
assert_equal('otherthing', getline(1)) assert_equal('otherthing', getline(1))
bwipe!
" also when the context is Vim9 script
let lines =<< trim END
vim9script
new
setline(1, 'something')
:substitute(some(other(
assert_equal('otherthing', getline(1))
bwipe!
END
writefile(lines, 'Xvim9lines')
source Xvim9lines
delete('Xvim9lines')
enddef enddef

View File

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