Patch 8.1.0083
Problem: "is" and "as" have trouble with quoted punctuation.
Solution: Check for punctuation before a quote. (Jason Franklin)
Files: src/search.c, src/testdir/test_textobjects.vim
*** ../vim-8.1.0082/src/search.c 2018-05-22 17:50:38.679980719 +0200
--- src/search.c 2018-06-19 18:19:14.194486159 +0200
***************
*** 2707,2716 ****
}
/*
! * findsent(dir, count) - Find the start of the next sentence in direction
! * "dir" Sentences are supposed to end in ".", "!" or "?" followed by white
! * space or a line break. Also stop at an empty line.
! * Return OK if the next sentence was found.
*/
int
findsent(int dir, long count)
--- 2707,2717 ----
}
/*
! * Find the start of the next sentence, searching in the direction specified
! * by the "dir" argument. The cursor is positioned on the start of the next
! * sentence when found. If the next sentence is found, return OK. Return
FAIL
! * otherwise. See ":h sentence" for the precise definition of a "sentence"
! * text object.
*/
int
findsent(int dir, long count)
***************
*** 2758,2783 ****
else if (dir == BACKWARD)
decl(&pos);
! /* go back to the previous non-blank char */
found_dot = FALSE;
! while ((c = gchar_pos(&pos)) == ' ' || c == '\t' ||
! (dir == BACKWARD && vim_strchr((char_u *)".!?)]\"'", c) != NULL))
{
! if (vim_strchr((char_u *)".!?", c) != NULL)
! {
! /* Only skip over a '.', '!' and '?' once. */
! if (found_dot)
! break;
found_dot = TRUE;
! }
! if (decl(&pos) == -1)
break;
! /* when going forward: Stop in front of empty line */
! if (LINEEMPTY(pos.lnum) && dir == FORWARD)
! {
! incl(&pos);
! goto found;
! }
}
/* remember the line where the search started */
--- 2759,2783 ----
else if (dir == BACKWARD)
decl(&pos);
! // go back to the previous non-white non-punctuation character
found_dot = FALSE;
! while (c = gchar_pos(&pos), VIM_ISWHITE(c)
! || vim_strchr((char_u *)".!?)]\"'", c) != NULL)
{
! tpos = pos;
! if (decl(&tpos) == -1 || (LINEEMPTY(tpos.lnum) && dir == FORWARD))
! break;
!
! if (found_dot)
! break;
! if (vim_strchr((char_u *) ".!?", c) != NULL)
found_dot = TRUE;
!
! if (vim_strchr((char_u *) ")]\"'", c) != NULL
! && vim_strchr((char_u *) ".!?)]\"'", gchar_pos(&tpos)) == NULL)
break;
!
! decl(&pos);
}
/* remember the line where the search started */
*** ../vim-8.1.0082/src/testdir/test_textobjects.vim 2018-02-09
18:06:35.000000000 +0100
--- src/testdir/test_textobjects.vim 2018-06-19 18:16:20.911420342 +0200
***************
*** 165,167 ****
--- 165,242 ----
norm it
q!
endfunc
+
+ func Test_sentence()
+ enew!
+ call setline(1, 'A sentence. A sentence? A sentence!')
+
+ normal yis
+ call assert_equal('A sentence.', @")
+ normal yas
+ call assert_equal('A sentence. ', @")
+
+ normal )
+
+ normal yis
+ call assert_equal('A sentence?', @")
+ normal yas
+ call assert_equal('A sentence? ', @")
+
+ normal )
+
+ normal yis
+ call assert_equal('A sentence!', @")
+ normal yas
+ call assert_equal(' A sentence!', @")
+
+ normal 0
+ normal 2yis
+ call assert_equal('A sentence. ', @")
+ normal 3yis
+ call assert_equal('A sentence. A sentence?', @")
+ normal 2yas
+ call assert_equal('A sentence. A sentence? ', @")
+
+ %delete _
+ endfunc
+
+ func Test_sentence_with_quotes()
+ enew!
+ call setline(1, 'A "sentence." A sentence.')
+
+ normal yis
+ call assert_equal('A "sentence."', @")
+ normal yas
+ call assert_equal('A "sentence." ', @")
+
+ normal )
+
+ normal yis
+ call assert_equal('A sentence.', @")
+ normal yas
+ call assert_equal(' A sentence.', @")
+
+ %delete _
+ endfunc
+
+ func! Test_sentence_with_cursor_on_delimiter()
+ enew!
+ call setline(1, "A '([sentence.])' A sentence.")
+
+ normal! 15|yis
+ call assert_equal("A '([sentence.])'", @")
+ normal! 15|yas
+ call assert_equal("A '([sentence.])' ", @")
+
+ normal! 16|yis
+ call assert_equal("A '([sentence.])'", @")
+ normal! 16|yas
+ call assert_equal("A '([sentence.])' ", @")
+
+ normal! 17|yis
+ call assert_equal("A '([sentence.])'", @")
+ normal! 17|yas
+ call assert_equal("A '([sentence.])' ", @")
+
+ %delete _
+ endfunc
*** ../vim-8.1.0082/src/version.c 2018-06-19 17:49:20.300015350 +0200
--- src/version.c 2018-06-19 18:27:12.611837877 +0200
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 83,
/**/
--
>From "know your smileys":
y:-) Bad toupee
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.