patch 8.2.5152: search() gets stuck with "c" and skip evaluates to true
Problem: search() gets stuck with "c" and skip evaluates to true.
Solution: Reset the SEARCH_START option. (closes #10608)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index b7d7643..39706cd 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -8543,6 +8543,9 @@
if (!do_skip)
break;
}
+
+ // clear the start flag to avoid getting stuck here
+ options &= ~SEARCH_START;
}
if (subpatnum != FAIL)
diff --git a/src/testdir/test_syntax.vim b/src/testdir/test_syntax.vim
index 589470b..93e56d7 100644
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -838,8 +838,9 @@
1
call search('VIM', 'w', '', 0, 'synIDattr(synID(line("."), col("."), 1), "name") =~? "comment"')
call assert_equal('Another Text for VIM', getline('.'))
+
1
- call search('VIM', 'w', '', 0, 'synIDattr(synID(line("."), col("."), 1), "name") !~? "string"')
+ call search('VIM', 'cw', '', 0, 'synIDattr(synID(line("."), col("."), 1), "name") !~? "string"')
call assert_equal(' let a = "VIM"', getline('.'))
" Skip argument using Lambda.
@@ -848,26 +849,27 @@
call assert_equal('Another Text for VIM', getline('.'))
1
- call search('VIM', 'w', '', 0, { -> synIDattr(synID(line("."), col("."), 1), "name") !~? "string"})
+ call search('VIM', 'cw', '', 0, { -> synIDattr(synID(line("."), col("."), 1), "name") !~? "string"})
call assert_equal(' let a = "VIM"', getline('.'))
" Skip argument using funcref.
func InComment()
return synIDattr(synID(line("."), col("."), 1), "name") =~? "comment"
endfunc
- func InString()
+ func NotInString()
return synIDattr(synID(line("."), col("."), 1), "name") !~? "string"
endfunc
+
1
call search('VIM', 'w', '', 0, function('InComment'))
call assert_equal('Another Text for VIM', getline('.'))
1
- call search('VIM', 'w', '', 0, function('InString'))
+ call search('VIM', 'cw', '', 0, function('NotInString'))
call assert_equal(' let a = "VIM"', getline('.'))
delfunc InComment
- delfunc InString
+ delfunc NotInString
bwipe!
endfunc
diff --git a/src/version.c b/src/version.c
index bb3f166..647daa2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 5152,
+/**/
5151,
/**/
5150,