From: Barrett Ruth Date: Wed, 22 Jul 2026 18:48:47 +0000 (+0000) Subject: patch 9.2.0834: cleared last search pattern is restored from viminfo X-Git-Tag: v9.2.0834^0 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fbe6397ab0c2d0beca87c5c54acf5a801956631f;p=thirdparty%2Fvim.git patch 9.2.0834: cleared last search pattern is restored from viminfo Problem: cleared last search pattern is restored from viminfo Solution: Do not apply the search pattern and 'hlsearch' state read from viminfo while writing (Barrett Ruth). fixes: #20718 closes: #20720 Signed-off-by: Barrett Ruth Signed-off-by: Christian Brabandt --- diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim index de987ef278..d95250a9ea 100644 --- a/src/testdir/test_viminfo.vim +++ b/src/testdir/test_viminfo.vim @@ -38,6 +38,19 @@ func Test_viminfo_read_and_write() call assert_equal(3, done) endfunc +func Test_viminfo_clear_search_pattern() + let save = @/ + let @/ = 'foobar' + defer delete('Xviminfo') + wviminfo Xviminfo + call assert_notequal(-1, match(readfile('Xviminfo'), 'foobar')) + + let @/ = '' + wviminfo Xviminfo + call assert_equal(-1, match(readfile('Xviminfo'), 'foobar')) + call setreg('/', save) +endfunc + func Test_global_vars() let g:MY_GLOBAL_STRING = "Vim Editor" let g:MY_GLOBAL_NUM = 345 diff --git a/src/version.c b/src/version.c index 6b32cb3094..3a7cc8698f 100644 --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 834, /**/ 833, /**/ diff --git a/src/viminfo.c b/src/viminfo.c index 95ec55ebb3..f8292dee50 100644 --- a/src/viminfo.c +++ b/src/viminfo.c @@ -1476,7 +1476,7 @@ write_viminfo_sub_string(FILE *fp) */ static int -read_viminfo_search_pattern(vir_T *virp, int force) +read_viminfo_search_pattern(vir_T *virp, int force, int writing) { char_u *lp; int idx = -1; @@ -1543,16 +1543,19 @@ read_viminfo_search_pattern(vir_T *virp, int force) TRUE); if (val != NULL) { - set_last_search_pat(val, idx, magic, setlast); - vim_free(val); - spat->no_scs = no_scs; - spat->off.line = off_line; - spat->off.end = off_end; - spat->off.off = off; + if (!writing) + { + set_last_search_pat(val, idx, magic, setlast); + spat->no_scs = no_scs; + spat->off.line = off_line; + spat->off.end = off_end; + spat->off.off = off; #ifdef FEAT_SEARCH_EXTRA - if (setlast) - set_no_hlsearch(!hlsearch_on); + if (setlast) + set_no_hlsearch(!hlsearch_on); #endif + } + vim_free(val); } } } @@ -2914,7 +2917,7 @@ read_viminfo_up_to_marks( case '/': // Search string case '&': // Substitute search string case '~': // Last search string, followed by '/' or '&' - eof = read_viminfo_search_pattern(virp, forceit); + eof = read_viminfo_search_pattern(virp, forceit, writing); break; case '$': eof = read_viminfo_sub_string(virp, forceit);