patch 9.1.0677: :keepp does not retain the substitute pattern Commit: https://github.com/vim/vim/commit/3b59be4ed8a145d3188934f1a5cd85432bd2433d Author: Gregory Anders <g...@gpanders.com> Date: Thu Aug 15 22:04:22 2024 +0200
patch 9.1.0677: :keepp does not retain the substitute pattern Problem: :keeppatterns does not retain the substitute pattern for a :s command Solution: preserve the last substitute pattern when used with the :keeppatterns command modifier (Gregory Anders) closes: #15497 Signed-off-by: Gregory Anders <g...@gpanders.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt index 214571f28..404e54de8 100644 --- a/runtime/doc/cmdline.txt +++ b/runtime/doc/cmdline.txt @@ -1,4 +1,4 @@ -*cmdline.txt* For Vim version 9.1. Last change: 2024 Apr 27 +*cmdline.txt* For Vim version 9.1. Last change: 2024 Aug 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -379,7 +379,7 @@ terminals) :keepp[atterns] {command} *:keepp* *:keeppatterns* Execute {command}, without adding anything to the search - history + history or modifying the last substitute pattern. ============================================================================== 2. Command-line completion *cmdline-completion* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 73e54a1cf..3729590fa 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2024 Jul 30 +*version9.txt* For Vim version 9.1. Last change: 2024 Aug 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41592,6 +41592,7 @@ Changed~ mark deprecated attributes from LSP server) |complete-items| - the regex engines match correctly case-insensitive multi-byte characters (and apply proper case folding) +- |:keeppatterns| preserves the last substitute pattern when used with |:s| *added-9.2* Added ~ diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 479373756..05778c8fd 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -3777,6 +3777,7 @@ ex_substitute(exarg_T *eap) int endcolumn = FALSE; // cursor in last column when done pos_T old_cursor = curwin->w_cursor; int start_nsubs; + int keeppatterns = cmdmod.cmod_flags & CMOD_KEEPPATTERNS; #ifdef FEAT_EVAL int save_ma = 0; int save_sandbox = 0; @@ -3876,7 +3877,7 @@ ex_substitute(exarg_T *eap) // out of memory return; } - else + else if (!keeppatterns) { vim_free(old_sub); old_sub = vim_strsave(sub); @@ -3940,7 +3941,7 @@ ex_substitute(exarg_T *eap) ex_may_print(eap); } - if ((cmdmod.cmod_flags & CMOD_KEEPPATTERNS) == 0) + if (!keeppatterns) save_re_pat(RE_SUBST, pat, patlen, magic_isset()); // put pattern in history add_to_history(HIST_SEARCH, pat, patlen, TRUE, NUL); diff --git a/src/testdir/test_substitute.vim b/src/testdir/test_substitute.vim index afdc104d7..b25cd6080 100644 --- a/src/testdir/test_substitute.vim +++ b/src/testdir/test_substitute.vim @@ -806,7 +806,7 @@ func Test_replace_keeppatterns() a foobar -substitute foo asdf +substitute foo asdf foo one two . @@ -815,21 +815,26 @@ one two /^substitute s/foo/bar/ call assert_equal('foo', @/) - call assert_equal('substitute bar asdf', getline('.')) + call assert_equal('substitute bar asdf foo', getline('.')) /^substitute keeppatterns s/asdf/xyz/ call assert_equal('^substitute', @/) - call assert_equal('substitute bar xyz', getline('.')) + call assert_equal('substitute bar xyz foo', getline('.')) + + /^substitute + & + call assert_equal('^substitute', @/) + call assert_equal('substitute bar xyz bar', getline('.')) exe "normal /bar /e\<CR>" call assert_equal(15, col('.')) normal - keeppatterns /xyz call assert_equal('bar ', @/) - call assert_equal('substitute bar xyz', getline('.')) + call assert_equal('substitute bar xyz bar', getline('.')) exe "normal 0dn" - call assert_equal('xyz', getline('.')) + call assert_equal('xyz bar', getline('.')) close! endfunc diff --git a/src/version.c b/src/version.c index e4fb2caa0..78ccd20e5 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 677, /**/ 676, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/E1segsF-003oQP-KQ%40256bit.org.