aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-05-15 08:04:23 +0800
committerGitHub <noreply@github.com>2023-05-15 08:04:23 +0800
commit4a0005aee9b51e1b91794623ad06b9a8a2343ba9 (patch)
tree84aeecb541d00ddc5fc98b546b286fb9cec936e0
parente71c7898ca3cf3af1243227ff3cba526d48897e8 (diff)
downloadrneovim-4a0005aee9b51e1b91794623ad06b9a8a2343ba9.tar.gz
rneovim-4a0005aee9b51e1b91794623ad06b9a8a2343ba9.tar.bz2
rneovim-4a0005aee9b51e1b91794623ad06b9a8a2343ba9.zip
vim-patch:9.0.1555: setcharsearch() does not clear last searched char properly (#23631)
Problem: setcharsearch() does not clear last searched char properly. Solution: Do not accept lastc_bytelen smaller than one. (closes vim/vim#12398) https://github.com/vim/vim/commit/e5d91ba1de83949eb9357c0fb8cbd91e7e69be6f
-rw-r--r--src/nvim/search.c4
-rw-r--r--test/old/testdir/test_charsearch.vim2
-rw-r--r--test/old/testdir/test_charsearch_utf8.vim7
3 files changed, 11 insertions, 2 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c
index d1a31a357f..bcaacede9e 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -1519,7 +1519,7 @@ int searchc(cmdarg_T *cap, int t_cmd)
}
}
} else { // repeat previous search
- if (*lastc == NUL && lastc_bytelen == 1) {
+ if (*lastc == NUL && lastc_bytelen <= 1) {
return FAIL;
}
if (dir) { // repeat in opposite direction
@@ -1562,7 +1562,7 @@ int searchc(cmdarg_T *cap, int t_cmd)
}
col -= utf_head_off(p, p + col - 1) + 1;
}
- if (lastc_bytelen == 1) {
+ if (lastc_bytelen <= 1) {
if (p[col] == c && stop) {
break;
}
diff --git a/test/old/testdir/test_charsearch.vim b/test/old/testdir/test_charsearch.vim
index 8d6b405743..084d4f0a22 100644
--- a/test/old/testdir/test_charsearch.vim
+++ b/test/old/testdir/test_charsearch.vim
@@ -38,6 +38,8 @@ func Test_charsearch()
" clear the character search
call setcharsearch({'char' : ''})
call assert_equal('', getcharsearch().char)
+ call assert_beeps('normal ;')
+ call assert_beeps('normal ,')
call assert_fails("call setcharsearch([])", 'E1206:')
enew!
diff --git a/test/old/testdir/test_charsearch_utf8.vim b/test/old/testdir/test_charsearch_utf8.vim
index 82a807ac5b..843edbb514 100644
--- a/test/old/testdir/test_charsearch_utf8.vim
+++ b/test/old/testdir/test_charsearch_utf8.vim
@@ -13,6 +13,13 @@ func Test_search_cmds()
call assert_equal([0, 1, 43, 0], getpos('.'))
normal! ,
call assert_equal([0, 1, 28, 0], getpos('.'))
+ call assert_equal('最', getcharsearch().char)
+ call setcharsearch({'char' : ''})
+ call assert_equal('', getcharsearch().char)
+ call assert_beeps('normal ;')
+ call assert_equal([0, 1, 28, 0], getpos('.'))
+ call assert_beeps('normal ,')
+ call assert_equal([0, 1, 28, 0], getpos('.'))
bw!
endfunc