forked from aniani/vim
patch 8.1.0083: "is" and "as" have trouble with quoted punctuation
Problem: "is" and "as" have trouble with quoted punctuation. Solution: Check for punctuation before a quote. (Jason Franklin)
This commit is contained in:
42
src/search.c
42
src/search.c
@@ -2707,10 +2707,11 @@ showmatch(
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
* 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,26 +2759,25 @@ findsent(int dir, long count)
|
||||
else if (dir == BACKWARD)
|
||||
decl(&pos);
|
||||
|
||||
/* go back to the previous non-blank char */
|
||||
// go back to the previous non-white non-punctuation character
|
||||
found_dot = FALSE;
|
||||
while ((c = gchar_pos(&pos)) == ' ' || c == '\t' ||
|
||||
(dir == BACKWARD && vim_strchr((char_u *)".!?)]\"'", c) != NULL))
|
||||
while (c = gchar_pos(&pos), VIM_ISWHITE(c)
|
||||
|| 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)
|
||||
tpos = pos;
|
||||
if (decl(&tpos) == -1 || (LINEEMPTY(tpos.lnum) && dir == FORWARD))
|
||||
break;
|
||||
/* when going forward: Stop in front of empty line */
|
||||
if (LINEEMPTY(pos.lnum) && dir == FORWARD)
|
||||
{
|
||||
incl(&pos);
|
||||
goto found;
|
||||
}
|
||||
|
||||
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 */
|
||||
|
||||
Reference in New Issue
Block a user