changeset 27962:0fa3be75ddc7 v8.2.4506

patch 8.2.4506: "pattern not found" for :global is not an error message Commit: https://github.com/vim/vim/commit/24d9c0557ef52141d12ac32568967b190d247c6f Author: Bram Moolenaar <Bram@vim.org> Date: Fri Mar 4 21:34:31 2022 +0000 patch 8.2.4506: "pattern not found" for :global is not an error message Problem: "pattern not found" for :global is not an error message. Solution: In Vim9 script make this an actual error, so that try/catch can be used as expected.
author Bram Moolenaar <Bram@vim.org>
date Fri, 04 Mar 2022 22:45:04 +0100
parents dd28ede556db
children f88ad1bc7cf0
files src/errors.h src/ex_cmds.c src/testdir/test_global.vim src/version.c
diffstat 4 files changed, 36 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/errors.h
+++ b/src/errors.h
@@ -1346,7 +1346,8 @@ EXTERN char e_comma_required[]
 EXTERN char e_commentstring_must_be_empty_or_contain_str[]
 	INIT(= N_("E537: 'commentstring' must be empty or contain %s"));
 #endif
-// E538 unused
+EXTERN char e_pattern_found_in_every_line_str[]
+	INIT(= N_("E538: Pattern found in every line: %s"));
 EXTERN char e_illegal_character_str[]
 	INIT(= N_("E539: Illegal character <%s>"));
 #ifdef FEAT_STL_OPT
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -5001,9 +5001,19 @@ ex_global(exarg_T *eap)
 	else if (ndone == 0)
 	{
 	    if (type == 'v')
-		smsg(_("Pattern found in every line: %s"), pat);
+	    {
+		if (in_vim9script())
+		    semsg(_(e_pattern_found_in_every_line_str), pat);
+		else
+		    smsg(_("Pattern found in every line: %s"), pat);
+	    }
 	    else
-		smsg(_("Pattern not found: %s"), pat);
+	    {
+		if (in_vim9script())
+		    semsg(_(e_pattern_not_found_str), pat);
+		else
+		    smsg(_("Pattern not found: %s"), pat);
+	    }
 	}
 	else
 	{
--- a/src/testdir/test_global.vim
+++ b/src/testdir/test_global.vim
@@ -68,6 +68,26 @@ func Test_global_print()
   v/foo\|bar/p
   call assert_notequal('', v:statusmsg)
 
+  " In Vim9 script this is an error
+  let caught = 'no'
+  try
+    vim9cmd v/foo\|bar/p
+  catch /E538/
+    let caught = 'yes'
+    call assert_match('E538: Pattern found in every line: foo\|bar', v:exception)
+  endtry
+  call assert_equal('yes', caught)
+
+  " In Vim9 script not matching is an error
+  let caught = 'no'
+  try
+    vim9cmd g/foobarnotfound/p
+  catch /E486/
+    let caught = 'yes'
+    call assert_match('E486: Pattern not found: foobarnotfound', v:exception)
+  endtry
+  call assert_equal('yes', caught)
+
   close!
 endfunc
 
--- 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 */
 /**/
+    4506,
+/**/
     4505,
 /**/
     4504,