]> granicus.if.org Git - vim/commitdiff
updated for version 7.0071 v7.0071
authorBram Moolenaar <Bram@vim.org>
Sun, 24 Apr 2005 22:09:56 +0000 (22:09 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 24 Apr 2005 22:09:56 +0000 (22:09 +0000)
src/eval.c

index edcb2fa44b21b839f6608aa2facfb38366f49ece..b33412e9d8d3265ad1a1a404049af74f6adad3e4 100644 (file)
@@ -12061,6 +12061,7 @@ f_searchpair(argvars, rettv)
     char_u     *pat, *pat2, *pat3;
     pos_T      pos;
     pos_T      firstpos;
+    pos_T      foundpos;
     pos_T      save_cursor;
     pos_T      save_pos;
     int                save_p_ws = p_ws;
@@ -12114,6 +12115,7 @@ f_searchpair(argvars, rettv)
     save_cursor = curwin->w_cursor;
     pos = curwin->w_cursor;
     firstpos.lnum = 0;
+    foundpos.lnum = 0;
     pat = pat3;
     for (;;)
     {
@@ -12125,6 +12127,17 @@ f_searchpair(argvars, rettv)
 
        if (firstpos.lnum == 0)
            firstpos = pos;
+       if (equalpos(pos, foundpos))
+       {
+           /* Found the same position again.  Can happen with a pattern that
+            * has "\zs" at the end and searching backwards.  Advance one
+            * character and try again. */
+           if (dir == BACKWARD)
+               decl(&pos);
+           else
+               incl(&pos);
+       }
+       foundpos = pos;
 
        /* If the skip pattern matches, ignore this match. */
        if (*skip != NUL)