diff --git a/src/ex_getln.c b/src/ex_getln.c
index 7928af7..bce4aac 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -307,49 +307,73 @@
 	    cmdmod = save_cmdmod;
 
 	    cmd = skip_range(ea.cmd, NULL);
-	    if (*cmd == 's' || *cmd == 'g' || *cmd == 'v')
+	    if (*cmd == 's' || *cmd == 'g' || *cmd == 'v' || *cmd == 'l')
 	    {
 		// Skip over "substitute" to find the pattern separator.
 		for (p = cmd; ASCII_ISALPHA(*p); ++p)
 		    ;
-		if (*skipwhite(p) != NUL
-			&& (STRNCMP(cmd, "substitute", p - cmd) == 0
-			    || STRNCMP(cmd, "smagic", p - cmd) == 0
-			    || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
-			    || STRNCMP(cmd, "sort", p - cmd) == 0
-			    || STRNCMP(cmd, "global", p - cmd) == 0
-			    || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+		if (*skipwhite(p) != NUL)
 		{
-		    if (*cmd == 's' && cmd[1] == 'm')
-			p_magic = TRUE;
-		    else if (*cmd == 's' && cmd[1] == 'n')
-			p_magic = FALSE;
-
-		    // Check for "global!/".
-		    if (*cmd == 'g' && *p == '!')
+		    if (STRNCMP(cmd, "substitute", p - cmd) == 0
+			|| STRNCMP(cmd, "smagic", p - cmd) == 0
+			|| STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+			|| STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0
+			|| STRNCMP(cmd, "global", p - cmd) == 0
+			|| STRNCMP(cmd, "vglobal", p - cmd) == 0)
 		    {
-			p++;
-			if (*skipwhite(p) == NUL)
-			    return FALSE;
+			if (*cmd == 's' && cmd[1] == 'm')
+			    p_magic = TRUE;
+			else if (*cmd == 's' && cmd[1] == 'n')
+			    p_magic = FALSE;
+
+			// Check for "global!/".
+			if (*cmd == 'g' && *p == '!')
+			{
+			    p++;
+			    if (*skipwhite(p) == NUL)
+				return FALSE;
+			}
+
+			// For ":sort" skip over flags.
+			if (cmd[0] == 's' && cmd[1] == 'o')
+			{
+			    while (ASCII_ISALPHA(*(p = skipwhite(p))))
+				++p;
+			    if (*p == NUL)
+				return FALSE;
+			}
+
+			p = skipwhite(p);
+			delim = *p++;
+			end = skip_regexp(p, delim, p_magic, NULL);
+		    }
+		    else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
+			|| STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
+			|| STRNCMP(cmd, "lvimgrep", MAX(p - cmd, 2)) == 0
+			|| STRNCMP(cmd, "lvimgrepadd", MAX(p - cmd, 9)) == 0)
+		    {
+			// Check for "!/".
+			if (*p == '!')
+			{
+			    p++;
+			    if (*skipwhite(p) == NUL)
+				return FALSE;
+			}
+			p = skipwhite(p);
+			delim = (vim_isIDc(*p)) ? ' ' : *p++;
+			end = skip_regexp(p, delim, p_magic, NULL);
+		    }
+		    else
+		    {
+			end = p;
+			delim = -1;
 		    }
 
-		    // For ":sort" skip over flags.
-		    if (cmd[0] == 's' && cmd[1] == 'o')
-		    {
-			while (ASCII_ISALPHA(*(p = skipwhite(p))))
-			    ++p;
-			if (*p == NUL)
-			    return FALSE;
-		    }
-
-		    p = skipwhite(p);
-		    delim = *p++;
-		    end = skip_regexp(p, delim, p_magic, NULL);
 		    if (end > p || *end == delim)
 		    {
 			pos_T	save_cursor = curwin->w_cursor;
 
-			// found a non-empty pattern
+			// found a non-empty pattern or //
 			*skiplen = (int)(p - ccline.cmdbuff);
 			*patlen = (int)(end - p);
 
diff --git a/src/testdir/dumps/Test_incsearch_vimgrep_01.dump b/src/testdir/dumps/Test_incsearch_vimgrep_01.dump
new file mode 100644
index 0000000..955d030
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_vimgrep_01.dump
@@ -0,0 +1,9 @@
+|a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
+|t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
+|t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
+|~+0#4040ff13&| @68
+|~| @68
+|~| @68
+|~| @68
+|~| @68
+|:+0#0000000&|v|i|m|g|r|e|p| |o|n> @58
diff --git a/src/testdir/dumps/Test_incsearch_vimgrep_02.dump b/src/testdir/dumps/Test_incsearch_vimgrep_02.dump
new file mode 100644
index 0000000..a5d94ea
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_vimgrep_02.dump
@@ -0,0 +1,9 @@
+|a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
+|t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
+|t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
+|~+0#4040ff13&| @68
+|~| @68
+|~| @68
+|~| @68
+|~| @68
+|:+0#0000000&|v|i|m|g| |/|o|n|/| |*|.|t|x|t> @53
diff --git a/src/testdir/dumps/Test_incsearch_vimgrep_03.dump b/src/testdir/dumps/Test_incsearch_vimgrep_03.dump
new file mode 100644
index 0000000..038ceb9
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_vimgrep_03.dump
@@ -0,0 +1,9 @@
+|a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
+|t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
+|t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
+|~+0#4040ff13&| @68
+|~| @68
+|~| @68
+|~| @68
+|~| @68
+|:+0#0000000&|v|i|m|g|r|e|p|a|d@1| |"|\|<|o|n> @52
diff --git a/src/testdir/dumps/Test_incsearch_vimgrep_04.dump b/src/testdir/dumps/Test_incsearch_vimgrep_04.dump
new file mode 100644
index 0000000..92dd78d
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_vimgrep_04.dump
@@ -0,0 +1,9 @@
+|a+0&#ffffff0|n|o|t|h|e|r| |o|n|e| |2| @56
+|t+1&&|h|a|t+0&&| |o|n|e| |3| @59
+|t|h|e| |o|n|e| |1| @60
+|~+0#4040ff13&| @68
+|~| @68
+|~| @68
+|~| @68
+|~| @68
+|:+0#0000000&|l|v| |"|t|h|a> @61
diff --git a/src/testdir/dumps/Test_incsearch_vimgrep_05.dump b/src/testdir/dumps/Test_incsearch_vimgrep_05.dump
new file mode 100644
index 0000000..e11ff57
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_vimgrep_05.dump
@@ -0,0 +1,9 @@
+|a+0&#ffffff0|n|o|t+1&&|h|e|r+0&&| |o|n|e| |2| @56
+|t|h|a|t| |o|n|e| |3| @59
+|t+0&#ffff4012|h|e| +0&#ffffff0|o|n|e| |1| @60
+|~+0#4040ff13&| @68
+|~| @68
+|~| @68
+|~| @68
+|~| @68
+|:+0#0000000&|l|v|i|m|g|r|e|p|a| |"|t|h|e|"| |*@1|/|*|.|t|x|t> @44
diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim
index da388cd..9ede26d 100644
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -944,6 +944,53 @@
   call delete('Xis_sort_script')
 endfunc
 
+" Similar to Test_incsearch_substitute_dump() for :vimgrep famiry
+func Test_incsearch_vimgrep_dump()
+  if !exists('+incsearch')
+    return
+  endif
+  if !CanRunVimInTerminal()
+    return
+  endif
+  call writefile([
+	\ 'set incsearch hlsearch scrolloff=0',
+	\ 'call setline(1, ["another one 2", "that one 3", "the one 1"])',
+	\ ], 'Xis_vimgrep_script')
+  let buf = RunVimInTerminal('-S Xis_vimgrep_script', {'rows': 9, 'cols': 70})
+  " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by
+  " the 'ambiwidth' check.
+  sleep 100m
+
+  " Need to send one key at a time to force a redraw.
+  call term_sendkeys(buf, ':vimgrep on')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_01', {})
+  call term_sendkeys(buf, "\<Esc>")
+
+  call term_sendkeys(buf, ':vimg /on/ *.txt')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_02', {})
+  call term_sendkeys(buf, "\<Esc>")
+
+  call term_sendkeys(buf, ':vimgrepadd "\<on')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_03', {})
+  call term_sendkeys(buf, "\<Esc>")
+
+  call term_sendkeys(buf, ':lv "tha')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_04', {})
+  call term_sendkeys(buf, "\<Esc>")
+
+  call term_sendkeys(buf, ':lvimgrepa "the" **/*.txt')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_05', {})
+  call term_sendkeys(buf, "\<Esc>")
+
+  call StopVimInTerminal(buf)
+  call delete('Xis_vimgrep_script')
+endfunc
+
 func Test_search_undefined_behaviour()
   if !has("terminal")
     return
diff --git a/src/version.c b/src/version.c
index 8cf1ad4..a084de0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    295,
+/**/
     294,
 /**/
     293,
