changeset 27980:40e35cefeac6 v8.2.4515

patch 8.2.4515: old subsitute syntax is still supported Commit: https://github.com/vim/vim/commit/9fb7b42935f13b5d3407eb82b151da1e9b4b6048 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 5 21:13:26 2022 +0000 patch 8.2.4515: old subsitute syntax is still supported Problem: Old subsitute syntax is still supported. Solution: Disallow using backslash after ":s" in Vim9 script.
author Bram Moolenaar <Bram@vim.org>
date Sat, 05 Mar 2022 22:15:02 +0100
parents 48f9b7f4d67c
children 9cb0f4a9af46
files src/errors.h src/ex_cmds.c src/testdir/test_substitute.vim src/version.c
diffstat 4 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/errors.h
+++ b/src/errors.h
@@ -3246,4 +3246,6 @@ EXTERN char e_cannot_use_s_colon_in_vim9
 	INIT(= N_("E1268: Cannot use s: in Vim9 script: %s"));
 EXTERN char e_cannot_create_vim9_script_variable_in_function_str[]
 	INIT(= N_("E1269: Cannot create a Vim9 script variable in a function: %s"));
+EXTERN char e_cannot_use_s_backslash_in_vim9_script[]
+	INIT(= N_("E1270: Cannot use :s\\/sub/ in Vim9 script"));
 #endif
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3737,6 +3737,11 @@ ex_substitute(exarg_T *eap)
 	 */
 	if (*cmd == '\\')
 	{
+	    if (in_vim9script())
+	    {
+		emsg(_(e_cannot_use_s_backslash_in_vim9_script));
+		return;
+	    }
 	    ++cmd;
 	    if (vim_strchr((char_u *)"/?&", *cmd) == NULL)
 	    {
--- a/src/testdir/test_substitute.vim
+++ b/src/testdir/test_substitute.vim
@@ -811,6 +811,10 @@ func Test_sub_vi_compatibility()
   s\&green&
   call assert_equal('amber green yellow white green', getline(1))
   close!
+
+  call assert_fails('vim9cmd s\/white/', 'E1270:')
+  call assert_fails('vim9cmd s\?white?', 'E1270:')
+  call assert_fails('vim9cmd s\&white&', 'E1270:')
 endfunc
 
 " Test for substitute with the new text longer than the original text
--- 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 */
 /**/
+    4515,
+/**/
     4514,
 /**/
     4513,