changeset 20895:56c86b167b68 v8.2.0999

patch 8.2.0999: moving to next sentence gets stuck on quote Commit: https://github.com/vim/vim/commit/2f03e5a0a9cfaabb01c57dd3348a05e86c26623c Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 18 15:33:25 2020 +0200 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)
author Bram Moolenaar <Bram@vim.org>
date Thu, 18 Jun 2020 15:45:04 +0200
parents 04fa8b5b5f42
children 9df2164fcd19
files src/testdir/test_textobjects.vim src/textobject.c src/version.c
diffstat 3 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -311,6 +311,17 @@ func Test_sentence_with_cursor_on_delimi
   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
 
--- a/src/textobject.c
+++ b/src/textobject.c
@@ -26,6 +26,7 @@ static int skip_chars(int, int);
 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 @@ findsent(int dir, long count)
 
     while (count--)
     {
+	prev_pos = pos;
+
 	/*
 	 * if on an empty line, skip up to a non-empty line
 	 */
@@ -133,6 +136,18 @@ found:
 	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();
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    999,
+/**/
     998,
 /**/
     997,