summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-23 14:35:01 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-23 14:35:01 +0100
commit83f37b91426b419a913aa4f42d041b2111b57864 (patch)
tree6d508483d9e6ca68f2cbab5d11a282003fe60c0a
parent8040a7147f5b896a702d1684e7831df107490f45 (diff)
patch 8.2.0306: Vim9: :substitute(pat(repl does not work in Vim9 scriptv8.2.0306
Problem: Vim9: :substitute(pat(repl does not work in Vim9 script. Solution: Remember starting with a colon. (closes #5676)
-rw-r--r--src/ex_docmd.c6
-rw-r--r--src/testdir/test_vim9_script.vim15
-rw-r--r--src/version.c2
3 files changed, 22 insertions, 1 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 70c0da2f03..62cab6e22f 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1647,6 +1647,9 @@ do_one_cmd(
int save_reg_executing = reg_executing;
int ni; // set when Not Implemented
char_u *cmd;
+#ifdef FEAT_EVAL
+ int starts_with_colon;
+#endif
vim_memset(&ea, 0, sizeof(ea));
ea.line1 = 1;
@@ -1689,6 +1692,7 @@ do_one_cmd(
ea.cookie = cookie;
#ifdef FEAT_EVAL
ea.cstack = cstack;
+ starts_with_colon = *skipwhite(ea.cmd) == ':';
#endif
if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
goto doend;
@@ -1713,7 +1717,7 @@ do_one_cmd(
ea.cmd = skipwhite(ea.cmd + 1);
#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);
else
#endif
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 5dbc9f9ea7..a7bccec4e2 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -580,6 +580,21 @@ def Test_substitute_cmd()
setline(1, 'something')
:substitute(some(other(
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
diff --git a/src/version.c b/src/version.c
index 2c4f78b42c..49cdcc5da7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 306,
+/**/
305,
/**/
304,