diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-05-15 08:04:23 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-15 08:04:23 +0800 |
commit | 4a0005aee9b51e1b91794623ad06b9a8a2343ba9 (patch) | |
tree | 84aeecb541d00ddc5fc98b546b286fb9cec936e0 | |
parent | e71c7898ca3cf3af1243227ff3cba526d48897e8 (diff) | |
download | rneovim-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.c | 4 | ||||
-rw-r--r-- | test/old/testdir/test_charsearch.vim | 2 | ||||
-rw-r--r-- | test/old/testdir/test_charsearch_utf8.vim | 7 |
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 |