diff options
author | Gregory Anders <greg@gpanders.com> | 2024-08-15 22:04:22 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-08-15 22:09:28 +0200 |
commit | 3b59be4ed8a145d3188934f1a5cd85432bd2433d (patch) | |
tree | bda28c1a26321ab648b4273abf0d89c4b490d102 | |
parent | 12cb1d1326c785c0f44303d113f27edcd473cb33 (diff) |
patch 9.1.0677: :keepp does not retain the substitute patternv9.1.0677
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 <greg@gpanders.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | runtime/doc/cmdline.txt | 4 | ||||
-rw-r--r-- | runtime/doc/version9.txt | 3 | ||||
-rw-r--r-- | src/ex_cmds.c | 5 | ||||
-rw-r--r-- | src/testdir/test_substitute.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 19 insertions, 10 deletions
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt index 214571f289..404e54de8c 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 73e54a1cf3..3729590fae 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 4793737560..05778c8fd8 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 afdc104d7c..b25cd60803 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 e4fb2caa06..78ccd20e5a 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 677, +/**/ 676, /**/ 675, |