diff --git a/src/quickfix.c b/src/quickfix.c
index 079e6c9..38f7d95 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -35,7 +35,7 @@
     int		     qf_col;	/* column where the error occurred */
     int		     qf_nr;	/* error number */
     char_u	    *qf_text;	/* description of the error */
-    char_u	     qf_virt_col; /* set to TRUE if qf_col is screen column */
+    char_u	     qf_viscol; /* set to TRUE if qf_col is screen column */
     char_u	     qf_cleared;/* set to TRUE if line has been deleted */
     char_u	     qf_type;	/* type of the error (mostly 'E'); 1 for
 				   :helpgrep */
@@ -88,7 +88,7 @@
 
 static int qf_init_ext __ARGS((char_u *efile, buf_T *buf, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast));
 static void	qf_new_list __ARGS((void));
-static int	qf_add_entry __ARGS((struct qf_line **prevp, char_u *dir, char_u *fname, char_u *mesg, long lnum, int col, int virt_col, int nr, int type, int valid));
+static int	qf_add_entry __ARGS((struct qf_line **prevp, char_u *dir, char_u *fname, char_u *mesg, long lnum, int col, int vis_col, int nr, int type, int valid));
 static void	qf_msg __ARGS((void));
 static void	qf_free __ARGS((int idx));
 static char_u	*qf_types __ARGS((int, int));
@@ -147,7 +147,7 @@
     char_u	    *errmsg;
     char_u	    *fmtstr = NULL;
     int		    col = 0;
-    char_u	    use_virt_col = FALSE;
+    char_u	    use_viscol = FALSE;
     int		    type = 0;
     int		    valid;
     linenr_T	    buflnum = lnumfirst;
@@ -467,7 +467,7 @@
 		errmsg[0] = NUL;
 	    lnum = 0;
 	    col = 0;
-	    use_virt_col = FALSE;
+	    use_viscol = FALSE;
 	    enr = -1;
 	    type = 0;
 	    tail = NULL;
@@ -515,12 +515,12 @@
 		{
 		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
 		    if (*((char_u *)regmatch.startp[i]) != TAB)
-			use_virt_col = TRUE;
+			use_viscol = TRUE;
 		}
 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
 		{
 		    col = (int)atol((char *)regmatch.startp[i]);
-		    use_virt_col = TRUE;
+		    use_viscol = TRUE;
 		}
 		break;
 	    }
@@ -578,7 +578,7 @@
 		    qfprev->qf_lnum = lnum;
 		if (!qfprev->qf_col)
 		    qfprev->qf_col = col;
-		qfprev->qf_virt_col = use_virt_col;
+		qfprev->qf_viscol = use_viscol;
 		if (!qfprev->qf_fnum)
 		    qfprev->qf_fnum = qf_get_fnum(directory,
 					*namebuf || directory ? namebuf
@@ -623,7 +623,7 @@
 			errmsg,
 			lnum,
 			col,
-			use_virt_col,
+			use_viscol,
 			enr,
 			type,
 			valid) == FAIL)
@@ -714,14 +714,14 @@
  * Returns OK or FAIL.
  */
     static int
-qf_add_entry(prevp, dir, fname, mesg, lnum, col, virt_col, nr, type, valid)
+qf_add_entry(prevp, dir, fname, mesg, lnum, col, vis_col, nr, type, valid)
     struct qf_line **prevp;	/* pointer to previously added entry or NULL */
     char_u	*dir;		/* optional directory name */
     char_u	*fname;		/* file name or NULL */
     char_u	*mesg;		/* message */
     long	lnum;		/* line number */
     int		col;		/* column */
-    int		virt_col;	/* using virtual column */
+    int		vis_col;	/* using visual column */
     int		nr;		/* error number */
     int		type;		/* type character */
     int		valid;		/* valid entry */
@@ -739,7 +739,7 @@
     }
     qfp->qf_lnum = lnum;
     qfp->qf_col = col;
-    qfp->qf_virt_col = virt_col;
+    qfp->qf_viscol = vis_col;
     qfp->qf_nr = nr;
     if (type != 1 && !vim_isprintc(type)) /* only printable chars allowed */
 	type = 0;
@@ -1285,7 +1285,7 @@
 	if (qf_ptr->qf_col > 0)
 	{
 	    curwin->w_cursor.col = qf_ptr->qf_col - 1;
-	    if (qf_ptr->qf_virt_col == TRUE)
+	    if (qf_ptr->qf_viscol == TRUE)
 	    {
 		/*
 		 * Check each character from the beginning of the error
@@ -2300,6 +2300,8 @@
 #endif
 #ifdef FEAT_AUTOCMD
     char_u	*au_name =  NULL;
+    int		flags = 0;
+    colnr_T	col;
 
     switch (eap->cmdidx)
     {
@@ -2318,14 +2320,12 @@
 
     /* Get the search pattern: either white-separated or enclosed in // */
     regmatch.regprog = NULL;
-    p = skip_vimgrep_pat(eap->arg, &s);
+    p = skip_vimgrep_pat(eap->arg, &s, &flags);
     if (p == NULL)
     {
 	EMSG(_("E682: Invalid search pattern or delimiter"));
 	goto theend;
     }
-    if (*p != NUL)
-	*p++ = NUL;
     regmatch.regprog = vim_regcomp(s, RE_MAGIC);
     if (regmatch.regprog == NULL)
 	goto theend;
@@ -2437,10 +2437,13 @@
 		goto jumpend;
 	    }
 #endif
+	    /* Try for a match in all lines of the buffer. */
 	    for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
 	    {
-		if (vim_regexec_multi(&regmatch, curwin, buf, lnum,
-							      (colnr_T)0) > 0)
+		/* For ":1vimgrep" look for multiple matches. */
+		col = 0;
+		while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
+								     col) > 0)
 		{
 		    if (qf_add_entry(&prevp,
 				NULL,       /* dir */
@@ -2449,7 +2452,7 @@
 				     regmatch.startpos[0].lnum + lnum, FALSE),
 				regmatch.startpos[0].lnum + lnum,
 				regmatch.startpos[0].col + 1,
-				FALSE,      /* virt_col */
+				FALSE,      /* vis_col */
 				0,          /* nr */
 				0,          /* type */
 				TRUE        /* valid */
@@ -2460,6 +2463,13 @@
 		    }
 		    else
 			found_match = TRUE;
+		    if ((flags & VGR_GLOBAL) == 0
+					       || regmatch.endpos[0].lnum > 0)
+			break;
+		    col = regmatch.endpos[0].col
+					    + (col == regmatch.endpos[0].col);
+		    if (col > STRLEN(ml_get_buf(buf, lnum, FALSE)))
+			break;
 		}
 		line_breakcheck();
 		if (got_int)
@@ -2485,14 +2495,14 @@
 		{
 		    /* When not hiding the buffer and no match was found we
 		     * don't need to remember the buffer, wipe it out.  If
-		     * there was a match and it wasn't the first one: only
-		     * unload the buffer. */
+		     * there was a match and it wasn't the first one or we
+		     * won't jump there: only unload the buffer. */
 		    if (!found_match)
 		    {
 			wipe_dummy_buffer(buf);
 			buf = NULL;
 		    }
-		    else if (buf != first_match_buf)
+		    else if (buf != first_match_buf || (flags & VGR_NOJUMP))
 		    {
 			unload_dummy_buffer(buf);
 			buf = NULL;
@@ -2528,7 +2538,10 @@
 
     /* Jump to first match. */
     if (qf_lists[qf_curlist].qf_count > 0)
-	qf_jump(0, 0, FALSE);
+    {
+	if ((flags & VGR_NOJUMP) == 0)
+	    qf_jump(0, 0, eap->forceit);
+    }
     else
 	EMSG2(_(e_nomatch2), s);
 
@@ -2543,29 +2556,57 @@
 }
 
 /*
- * Skip over the pattern argument of ":vimgrep /pat/".
+ * Skip over the pattern argument of ":vimgrep /pat/[g][j]".
  * Put the start of the pattern in "*s", unless "s" is NULL.
- * Return a pointer to the char just past the pattern.
+ * If "flags" is not NULL put the flags in it: VGR_GLOBAL, VGR_NOJUMP.
+ * If "s" is not NULL terminate the pattern with a NUL.
+ * Return a pointer to the char just past the pattern plus flags.
  */
     char_u *
-skip_vimgrep_pat(p, s)
-    char_u *p;
-    char_u **s;
+skip_vimgrep_pat(p, s, flags)
+    char_u  *p;
+    char_u  **s;
+    int	    *flags;
 {
     int		c;
 
     if (vim_isIDc(*p))
     {
+	/* ":vimgrep pattern fname" */
 	if (s != NULL)
 	    *s = p;
-	return skiptowhite(p);
+	p = skiptowhite(p);
+	if (s != NULL && *p != NUL)
+	    *p++ = NUL;
     }
-    if (s != NULL)
-	*s = p + 1;
-    c = *p;
-    p = skip_regexp(p + 1, c, TRUE, NULL);
-    if (*p != c)
-	return NULL;
+    else
+    {
+	/* ":vimgrep /pattern/[g][j] fname" */
+	if (s != NULL)
+	    *s = p + 1;
+	c = *p;
+	p = skip_regexp(p + 1, c, TRUE, NULL);
+	if (*p != c)
+	    return NULL;
+
+	/* Truncate the pattern. */
+	if (s != NULL)
+	    *p = NUL;
+	++p;
+
+	/* Find the flags */
+	while (*p == 'g' || *p == 'j')
+	{
+	    if (flags != NULL)
+	    {
+		if (*p == 'g')
+		    *flags |= VGR_GLOBAL;
+		else
+		    *flags |= VGR_NOJUMP;
+	    }
+	    ++p;
+	}
+    }
     return p;
 }
 
@@ -2667,6 +2708,51 @@
 	close_buffer(NULL, buf, DOBUF_UNLOAD);
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Add each quickfix error to list "list" as a dictionary.
+ */
+    int
+get_errorlist(list)
+    list_T	*list;
+{
+    dict_T	    *dict;
+    char_u	    buf[2];
+    struct qf_line  *qfp;
+    int		    i;
+
+    if (qf_curlist >= qf_listcount || qf_lists[qf_curlist].qf_count == 0)
+    {
+	EMSG(_(e_quickfix));
+	return FAIL;
+    }
+
+    qfp = qf_lists[qf_curlist].qf_start;
+    for (i = 1; !got_int && i <= qf_lists[qf_curlist].qf_count; ++i)
+    {
+	if ((dict = dict_alloc()) == NULL)
+	    return FAIL;
+	if (list_append_dict(list, dict) == FAIL)
+	    return FAIL;
+
+	buf[0] = qfp->qf_type;
+	buf[1] = NUL;
+	if ( dict_add_nr_str(dict, "bufnr", (long)qfp->qf_fnum, NULL) == FAIL
+	  || dict_add_nr_str(dict, "lnum",  (long)qfp->qf_lnum, NULL) == FAIL
+	  || dict_add_nr_str(dict, "col",   (long)qfp->qf_col, NULL) == FAIL
+	  || dict_add_nr_str(dict, "vcol",  (long)qfp->qf_viscol, NULL) == FAIL
+	  || dict_add_nr_str(dict, "nr",    (long)qfp->qf_nr, NULL) == FAIL
+	  || dict_add_nr_str(dict, "text",  0L, qfp->qf_text) == FAIL
+	  || dict_add_nr_str(dict, "type",  0L, buf) == FAIL
+	  || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
+	    return FAIL;
+
+	qfp = qfp->qf_next;
+    }
+    return OK;
+}
+#endif
+
 /*
  * ":[range]cbuffer [bufnr]" command.
  */
@@ -2781,7 +2867,7 @@
 					    lnum,
 					    (int)(regmatch.startp[0] - IObuff)
 								+ 1, /* col */
-					    FALSE,	/* virt_col */
+					    FALSE,	/* vis_col */
 					    0,		/* nr */
 					    1,		/* type */
 					    TRUE	/* valid */
