diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-06-18 20:23:12 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-06-18 20:35:06 -0400 |
commit | b198225361dd87161c494627dfebb3d9ffd6cf5a (patch) | |
tree | 96cecb4a6d95fc8d14f7226510053364099e223d | |
parent | 749429693df78ab233789cce9af356ab48346b35 (diff) | |
download | rneovim-b198225361dd87161c494627dfebb3d9ffd6cf5a.tar.gz rneovim-b198225361dd87161c494627dfebb3d9ffd6cf5a.tar.bz2 rneovim-b198225361dd87161c494627dfebb3d9ffd6cf5a.zip |
vim-patch:8.2.0999: moving to next sentence gets stuck on quote
Problem: Moving to next sentence gets stuck on quote.
Solution: When moving to the next sentence doesn't result in moving, advance
a character and try again. (closes vim/vim#6291)
https://github.com/vim/vim/commit/2f03e5a0a9cfaabb01c57dd3348a05e86c26623c
-rw-r--r-- | src/nvim/search.c | 17 | ||||
-rw-r--r-- | src/nvim/testdir/test_textobjects.vim | 11 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c index 23086c629b..b105d99d7c 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -2326,9 +2326,9 @@ int findsent(Direction dir, long count) func = decl; while (count--) { - /* - * if on an empty line, skip up to a non-empty line - */ + const pos_T prev_pos = pos; + + // if on an empty line, skip up to a non-empty line if (gchar_pos(&pos) == NUL) { do { if ((*func)(&pos) == -1) { @@ -2411,6 +2411,17 @@ found: while (!noskip && ((c = gchar_pos(&pos)) == ' ' || c == '\t')) if (incl(&pos) == -1) break; + + if (equalpos(prev_pos, pos)) { + // didn't actually move, advance one character and try again + if ((*func)(&pos) == -1) { + if (count) { + return FAIL; + } + break; + } + count++; + } } setpcmark(); diff --git a/src/nvim/testdir/test_textobjects.vim b/src/nvim/testdir/test_textobjects.vim index b20c4df311..7863317eb0 100644 --- a/src/nvim/testdir/test_textobjects.vim +++ b/src/nvim/testdir/test_textobjects.vim @@ -290,5 +290,16 @@ func! Test_sentence_with_cursor_on_delimiter() normal! 17|yas call assert_equal("A '([sentence.])' ", @") + " don't get stuck on a quote at the start of a sentence + %delete _ + call setline(1, ['A sentence.', '"A sentence"?', 'A sentence!']) + normal gg)) + call assert_equal(3, getcurpos()[1]) + + %delete _ + call setline(1, ['A sentence.', "'A sentence'?", 'A sentence!']) + normal gg)) + call assert_equal(3, getcurpos()[1]) + %delete _ endfunc |