updated for version 7.0026
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 3e5870b..3304167 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2114,7 +2114,7 @@
      */
     if ((ea.cmdidx == CMD_make
 			 || ea.cmdidx == CMD_grep || ea.cmdidx == CMD_grepadd)
-	    && !grep_internal(&ea))
+	    && !grep_internal(ea.cmdidx))
     {
 	char_u		*new_cmdline;
 	char_u		*program;
@@ -3164,7 +3164,13 @@
 	p++;
     xp->xp_pattern = p;
 
-    if (argt & XFILE)
+    if ((argt & XFILE)
+#ifdef FEAT_QUICKFIX
+	    || cmdidx == CMD_vimgrep
+	    || cmdidx == CMD_vimgrepadd
+	    || grep_internal(cmdidx)
+#endif
+       )
     {
 	int in_quote = FALSE;
 	char_u *bow = NULL;	/* Beginning of word */
@@ -4204,14 +4210,19 @@
 
     p = eap->arg;
 #ifdef FEAT_QUICKFIX
-    if (eap->cmdidx == CMD_vimgrep
-	    || eap->cmdidx == CMD_vimgrepadd
-	    || grep_internal(eap))
+    if (*p != NUL && (eap->cmdidx == CMD_vimgrep
+		|| eap->cmdidx == CMD_vimgrepadd
+		|| grep_internal(eap->cmdidx)))
     {
 	/* Skip over the pattern. */
-	p = skip_regexp(p + 1, *p, TRUE, NULL);
-	if (*p == *eap->arg)
-	    ++p;
+	if (vim_isIDc(*p))
+	    p = skiptowhite(p);
+	else
+	{
+	    p = skip_regexp(p + 1, *p, TRUE, NULL);
+	    if (*p == *eap->arg)
+		++p;
+	}
     }
 #endif