vim-patch:8.0.0446: the ";" command does not work after some characters

Problem:    The ";" command does not work after characters with a lower byte
            that is NUL.
Solution:   Properly check for not having a previous character. (Hirohito
            Higashi)

454709baff
This commit is contained in:
Justin M. Keyes 2018-02-11 20:05:57 +01:00
parent ff4a628081
commit 1257b04747
3 changed files with 51 additions and 4 deletions

View File

@ -1380,13 +1380,15 @@ int searchc(cmdarg_T *cap, int t_cmd)
lastc_bytelen += (*mb_char2bytes)(cap->ncharC2, lastc_bytes + lastc_bytelen); lastc_bytelen += (*mb_char2bytes)(cap->ncharC2, lastc_bytes + lastc_bytelen);
} }
} }
} else { /* repeat previous search */ } else { // repeat previous search
if (*lastc == NUL) if (*lastc == NUL && lastc_bytelen == 1) {
return FAIL; return FAIL;
if (dir) /* repeat in opposite direction */ }
if (dir) { // repeat in opposite direction
dir = -lastcdir; dir = -lastcdir;
else } else {
dir = lastcdir; dir = lastcdir;
}
t_cmd = last_t_cmd; t_cmd = last_t_cmd;
c = *lastc; c = *lastc;
/* For multi-byte re-use last lastc_bytes[] and lastc_bytelen. */ /* For multi-byte re-use last lastc_bytes[] and lastc_bytelen. */

View File

@ -5,6 +5,7 @@
" runtest.vim. Checking for the multi_byte feature is in the individual " runtest.vim. Checking for the multi_byte feature is in the individual
" files, so that they can be run by themselves. " files, so that they can be run by themselves.
source test_charsearch_utf8.vim
source test_expr_utf8.vim source test_expr_utf8.vim
source test_matchadd_conceal_utf8.vim source test_matchadd_conceal_utf8.vim
source test_regexp_utf8.vim source test_regexp_utf8.vim

View File

@ -0,0 +1,44 @@
" Tests for related f{char} and t{char} using utf-8.
if !has('multi_byte')
finish
endif
" Test for t,f,F,T movement commands
function! Test_search_cmds()
new!
call setline(1, "・最初から最後まで最強のVimは最高")
1
normal! f最
call assert_equal([0, 1, 4, 0], getpos('.'))
normal! ;
call assert_equal([0, 1, 16, 0], getpos('.'))
normal! 2;
call assert_equal([0, 1, 43, 0], getpos('.'))
normal! ,
call assert_equal([0, 1, 28, 0], getpos('.'))
bw!
endfunction
" vim: shiftwidth=2 sts=2 expandtab
" Tests for related f{char} and t{char} using utf-8.
if !has('multi_byte')
finish
endif
" Test for t,f,F,T movement commands
function! Test_search_cmds()
new!
call setline(1, "・最初から最後まで最強のVimは最高")
1
normal! f最
call assert_equal([0, 1, 4, 0], getpos('.'))
normal! ;
call assert_equal([0, 1, 16, 0], getpos('.'))
normal! 2;
call assert_equal([0, 1, 43, 0], getpos('.'))
normal! ,
call assert_equal([0, 1, 28, 0], getpos('.'))
bw!
endfunction
" vim: shiftwidth=2 sts=2 expandtab