From 24d9c0557ef52141d12ac32568967b190d247c6f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 4 Mar 2022 21:34:31 +0000 Subject: 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. --- src/errors.h | 3 ++- src/ex_cmds.c | 14 ++++++++++++-- src/testdir/test_global.vim | 20 ++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/errors.h b/src/errors.h index e08186ef2..6f25af6af 100644 --- 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 diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 91a2fa722..d926df536 100644 --- 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 { diff --git a/src/testdir/test_global.vim b/src/testdir/test_global.vim index 48753cfcc..62f588afb 100644 --- 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 diff --git a/src/version.c b/src/version.c index 5f703c4dd..12ea55670 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4506, /**/ 4505, /**/ -- cgit v1.2.1