updated for version 7.0071
diff --git a/src/eval.c b/src/eval.c
index edcb2fa..b33412e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -12061,6 +12061,7 @@
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 @@
save_cursor = curwin->w_cursor;
pos = curwin->w_cursor;
firstpos.lnum = 0;
+ foundpos.lnum = 0;
pat = pat3;
for (;;)
{
@@ -12125,6 +12127,17 @@
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)