aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKunMing Xie <qqzz014@gmail.com>2018-01-14 02:26:21 +0800
committerJustin M. Keyes <justinkz@gmail.com>2018-01-13 19:26:21 +0100
commit9ddeb6e187e6ef6045bf037e4225dc46c8efb693 (patch)
tree09568aa0f6fa45882233c27d0a8fa9910540dfda /src
parent911b1e49abb88a533711ce55376d2893d6424d29 (diff)
downloadrneovim-9ddeb6e187e6ef6045bf037e4225dc46c8efb693.tar.gz
rneovim-9ddeb6e187e6ef6045bf037e4225dc46c8efb693.tar.bz2
rneovim-9ddeb6e187e6ef6045bf037e4225dc46c8efb693.zip
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. https://github.com/vim/vim/commit/d3f78dc9ebd729475a7f24a50a91112e300d5ac9 * disable spell test for now
Diffstat (limited to 'src')
-rw-r--r--src/nvim/spell.c25
-rw-r--r--src/nvim/testdir/Makefile1
-rw-r--r--src/nvim/testdir/test_spell.vim20
3 files changed, 35 insertions, 11 deletions
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index d2b2575f6a..b3e80bd768 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -1484,21 +1484,23 @@ spell_move_to (
return found_len;
}
- if (curline)
+ if (curline) {
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.
if (dir == BACKWARD) {
- // 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;
-
- if (lnum > 1)
- --lnum;
- else if (!p_ws)
+ if (lnum > 1) {
+ lnum--;
+ } else if (!p_ws) {
break; // at first line and 'nowrapscan'
- else {
+ } else {
// Wrap around to the end of the buffer. May search the
// starting line again and accept the last match.
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
// give up.
- if (lnum == wp->w_cursor.lnum && (!found_one || wrapped))
+ if (lnum == wp->w_cursor.lnum && !found_one) {
break;
+ }
// Skip the characters at the start of the next line that were
// included in a match crossing line boundaries.
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 5af8dd20cd..a23dacba15 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -81,6 +81,7 @@ NEW_TESTS ?= \
test_search.res \
test_signs.res \
test_smartindent.res \
+ test_spell.res \
test_stat.res \
test_startup.res \
test_startup_utf8.res \
diff --git a/src/nvim/testdir/test_spell.vim b/src/nvim/testdir/test_spell.vim
new file mode 100644
index 0000000000..334568aadb
--- /dev/null
+++ b/src/nvim/testdir/test_spell.vim
@@ -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