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 #6291)
diff --git a/src/testdir/test_textobjects.vim b/src/testdir/test_textobjects.vim
index eed84e3..6eb6fbb 100644
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -311,6 +311,17 @@
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
diff --git a/src/textobject.c b/src/textobject.c
index e876d52..23bdc96 100644
--- a/src/textobject.c
+++ b/src/textobject.c
@@ -26,6 +26,7 @@
findsent(int dir, long count)
{
pos_T pos, tpos;
+ pos_T prev_pos;
int c;
int (*func)(pos_T *);
int startlnum;
@@ -41,6 +42,8 @@
while (count--)
{
+ prev_pos = pos;
+
/*
* if on an empty line, skip up to a non-empty line
*/
@@ -133,6 +136,18 @@
while (!noskip && ((c = gchar_pos(&pos)) == ' ' || c == '\t'))
if (incl(&pos) == -1)
break;
+
+ if (EQUAL_POS(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/version.c b/src/version.c
index 6ea3ce0..f1cc22f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 999,
+/**/
998,
/**/
997,