updated for version 7.0052
diff --git a/src/buffer.c b/src/buffer.c
index a634062..1eb23a3 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2082,25 +2082,38 @@
     char_u	*p;
     int		attempt;
     regprog_T	*prog;
+    char_u	*patc;
 
     *num_file = 0;		    /* return values in case of FAIL */
     *file = NULL;
 
-    /*
-     * attempt == 1: try match with    '^', match at start
-     * attempt == 2: try match without '^', match anywhere
-     */
-    for (attempt = 1; attempt <= 2; ++attempt)
+    /* Make a copy of "pat" and change "^" to "\(^\|[\/]\)". */
+    if (*pat == '^')
     {
-	if (attempt == 2)
-	{
-	    if (*pat != '^')	    /* there's no '^', no need to try again */
-		break;
-	    ++pat;		    /* skip the '^' */
-	}
-	prog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
-	if (prog == NULL)
+	patc = alloc((unsigned)STRLEN(pat) + 11);
+	if (patc == NULL)
 	    return FAIL;
+	STRCPY(patc, "\\(^\\|[\\/]\\)");
+	STRCPY(patc + 11, pat + 1);
+    }
+    else
+	patc = pat;
+
+    /*
+     * attempt == 0: try match with    '\<', match at start of word
+     * attempt == 2: try match without '\<', match anywhere
+     */
+    for (attempt = 0; attempt <= 2; attempt += 2)
+    {
+	if (attempt == 2 && patc == pat)
+	    break;	/* there was no anchor, no need to try again */
+	prog = vim_regcomp(patc + attempt, RE_MAGIC);
+	if (prog == NULL)
+	{
+	    if (patc != pat)
+		vim_free(patc);
+	    return FAIL;
+	}
 
 	/*
 	 * round == 1: Count the matches.
@@ -2136,6 +2149,8 @@
 		if (*file == NULL)
 		{
 		    vim_free(prog);
+		    if (patc != pat)
+			vim_free(patc);
 		    return FAIL;
 		}
 	    }
@@ -2145,6 +2160,9 @@
 	    break;
     }
 
+    if (patc != pat)
+	vim_free(patc);
+
     *num_file = count;
     return (count == 0 ? FAIL : OK);
 }