updated for version 7.0220
diff --git a/src/eval.c b/src/eval.c
index 423129b..fdb7e81 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -467,6 +467,7 @@
 static void f_cindent __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_col __ARGS((typval_T *argvars, typval_T *rettv));
 #if defined(FEAT_INS_EXPAND)
+static void f_complete __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_complete_add __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_complete_check __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
@@ -6884,6 +6885,7 @@
     {"cindent",		1, 1, f_cindent},
     {"col",		1, 1, f_col},
 #if defined(FEAT_INS_EXPAND)
+    {"complete",	2, 2, f_complete},
     {"complete_add",	1, 1, f_complete_add},
     {"complete_check",	0, 0, f_complete_check},
 #endif
@@ -8102,6 +8104,35 @@
 
 #if defined(FEAT_INS_EXPAND)
 /*
+ * "complete()" function
+ */
+/*ARGSUSED*/
+    static void
+f_complete(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    int	    startcol;
+
+    if ((State & INSERT) == 0)
+    {
+	EMSG(_("E785: complete() can only be used in Insert mode"));
+	return;
+    }
+    if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
+    {
+	EMSG(_(e_invarg));
+	return;
+    }
+
+    startcol = get_tv_number_chk(&argvars[0], NULL);
+    if (startcol <= 0)
+	return;
+
+    set_completion(startcol - 1, argvars[1].vval.v_list);
+}
+
+/*
  * "complete_add()" function
  */
 /*ARGSUSED*/
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 9deeae4..23dbcd5 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -949,9 +949,14 @@
 	do_shell(newcmd, 0);
     }
     else				/* :range! */
+    {
 	/* Careful: This may recursively call do_bang() again! (because of
 	 * autocommands) */
 	do_filter(line1, line2, eap, newcmd, do_in, do_out);
+#ifdef FEAT_AUTOCMD
+	apply_autocmds(EVENT_SHELLFILTERPOST, NULL, NULL, FALSE, curbuf);
+#endif
+    }
     if (free_newcmd)
 	vim_free(newcmd);
 }
@@ -1419,6 +1424,10 @@
 
     /* display any error messages now */
     display_errors();
+
+#ifdef FEAT_AUTOCMD
+    apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
+#endif
 }
 
 /*
diff --git a/src/proto/edit.pro b/src/proto/edit.pro
index 66df8f5..aa12b12 100644
--- a/src/proto/edit.pro
+++ b/src/proto/edit.pro
@@ -9,6 +9,7 @@
 int vim_is_ctrl_x_key __ARGS((int c));
 int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags));
 int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u *extra, int cdir, int flags));
+void set_completion __ARGS((int startcol, list_T *list));
 void ins_compl_show_pum __ARGS((void));
 char_u *find_word_start __ARGS((char_u *ptr));
 char_u *find_word_end __ARGS((char_u *ptr));