vim-patch:8.0.0364 (#7837)

vim-patch:8.0.0364: ]s does not move cursor with two spell errors in one line

Problem:    ]s does not move cursor with two spell errors in one line. (Manuel
            Ortega)
Solution:   Don't stop search immediately when wrapped, search the line first.
            (Ken Takata)  Add a test.

d3f78dc9eb

* disable spell test for now
This commit is contained in:
KunMing Xie
2018-01-14 02:26:21 +08:00
committed by Justin M. Keyes
parent 911b1e49ab
commit 9ddeb6e187
3 changed files with 35 additions and 11 deletions

View File

@@ -1484,21 +1484,23 @@ spell_move_to (
return found_len; return found_len;
} }
if (curline) if (curline) {
break; // only check cursor line break; // only check cursor line
}
// If we are back at the starting line and searched it again there
// is no match, give up.
if (lnum == wp->w_cursor.lnum && wrapped) {
break;
}
// Advance to next line. // Advance to next line.
if (dir == BACKWARD) { if (dir == BACKWARD) {
// If we are back at the starting line and searched it again there if (lnum > 1) {
// is no match, give up. lnum--;
if (lnum == wp->w_cursor.lnum && wrapped) } else if (!p_ws) {
break;
if (lnum > 1)
--lnum;
else if (!p_ws)
break; // at first line and 'nowrapscan' break; // at first line and 'nowrapscan'
else { } else {
// Wrap around to the end of the buffer. May search the // Wrap around to the end of the buffer. May search the
// starting line again and accept the last match. // starting line again and accept the last match.
lnum = wp->w_buffer->b_ml.ml_line_count; lnum = wp->w_buffer->b_ml.ml_line_count;
@@ -1523,8 +1525,9 @@ spell_move_to (
// If we are back at the starting line and there is no match then // If we are back at the starting line and there is no match then
// give up. // give up.
if (lnum == wp->w_cursor.lnum && (!found_one || wrapped)) if (lnum == wp->w_cursor.lnum && !found_one) {
break; break;
}
// Skip the characters at the start of the next line that were // Skip the characters at the start of the next line that were
// included in a match crossing line boundaries. // included in a match crossing line boundaries.

View File

@@ -81,6 +81,7 @@ NEW_TESTS ?= \
test_search.res \ test_search.res \
test_signs.res \ test_signs.res \
test_smartindent.res \ test_smartindent.res \
test_spell.res \
test_stat.res \ test_stat.res \
test_startup.res \ test_startup.res \
test_startup_utf8.res \ test_startup_utf8.res \

View File

@@ -0,0 +1,20 @@
" Test spell checking
" TODO: move test58 tests here
if v:true
finish
endif
func Test_wrap_search()
new
call setline(1, ['The', '', 'A plong line with two zpelling mistakes', '', 'End'])
set spell wrapscan
normal ]s
call assert_equal('plong', expand('<cword>'))
normal ]s
call assert_equal('zpelling', expand('<cword>'))
normal ]s
call assert_equal('plong', expand('<cword>'))
bwipe!
set nospell
endfunc