diff --git a/src/eval.c b/src/eval.c
index 9b3f248..cbfd98f 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -8929,60 +8929,6 @@
     }
 }
 
-/*
- * List v:oldfiles in a nice way.
- */
-    void
-ex_oldfiles(exarg_T *eap UNUSED)
-{
-    list_T	*l = vimvars[VV_OLDFILES].vv_list;
-    listitem_T	*li;
-    int		nr = 0;
-
-    if (l == NULL)
-	msg((char_u *)_("No old files"));
-    else
-    {
-	msg_start();
-	msg_scroll = TRUE;
-	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
-	{
-	    msg_outnum((long)++nr);
-	    MSG_PUTS(": ");
-	    msg_outtrans(get_tv_string(&li->li_tv));
-	    msg_putchar('\n');
-	    out_flush();	    /* output one line at a time */
-	    ui_breakcheck();
-	}
-	/* Assume "got_int" was set to truncate the listing. */
-	got_int = FALSE;
-
-#ifdef FEAT_BROWSE_CMD
-	if (cmdmod.browse)
-	{
-	    quit_more = FALSE;
-	    nr = prompt_for_number(FALSE);
-	    msg_starthere();
-	    if (nr > 0)
-	    {
-		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
-								    (long)nr);
-
-		if (p != NULL)
-		{
-		    p = expand_env_save(p);
-		    eap->arg = p;
-		    eap->cmdidx = CMD_edit;
-		    cmdmod.browse = FALSE;
-		    do_exedit(eap, NULL);
-		    vim_free(p);
-		}
-	    }
-	}
-#endif
-    }
-}
-
 /* reset v:option_new, v:option_old and v:option_type */
     void
 reset_v_option_vars(void)
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 919aafc..e727ecc 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -8391,3 +8391,84 @@
     }
 }
 #endif
+
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * List v:oldfiles in a nice way.
+ */
+    void
+ex_oldfiles(exarg_T *eap UNUSED)
+{
+    list_T	*l = get_vim_var_list(VV_OLDFILES);
+    listitem_T	*li;
+    int		nr = 0;
+    char_u	*reg_pat = NULL;
+    char_u	*fname;
+    regmatch_T	regmatch;
+
+    if (l == NULL)
+	msg((char_u *)_("No old files"));
+    else
+    {
+	if (*eap->arg != NUL)
+	{
+	    if (skip_vimgrep_pat(eap->arg, &reg_pat, NULL) == NULL)
+	    {
+		EMSG(_(e_invalpat));
+		return;
+	    }
+	    regmatch.regprog = vim_regcomp(reg_pat, p_magic ? RE_MAGIC : 0);
+	    if (regmatch.regprog == NULL)
+		return;
+	}
+
+	msg_start();
+	msg_scroll = TRUE;
+	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
+	{
+	    ++nr;
+	    fname = get_tv_string(&li->li_tv);
+	    if (reg_pat == NULL || *reg_pat == NUL
+				  || vim_regexec(&regmatch, fname, (colnr_T)0))
+	    {
+		msg_outnum((long)nr);
+		MSG_PUTS(": ");
+		msg_outtrans(fname);
+		msg_putchar('\n');
+		out_flush();	    /* output one line at a time */
+		ui_breakcheck();
+	    }
+	}
+	if (*eap->arg != NUL)
+	    vim_regfree(regmatch.regprog);
+
+	/* Assume "got_int" was set to truncate the listing. */
+	got_int = FALSE;
+
+# ifdef FEAT_BROWSE_CMD
+	if (cmdmod.browse)
+	{
+	    quit_more = FALSE;
+	    nr = prompt_for_number(FALSE);
+	    msg_starthere();
+	    if (nr > 0)
+	    {
+		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
+								    (long)nr);
+
+		if (p != NULL)
+		{
+		    p = expand_env_save(p);
+		    eap->arg = p;
+		    eap->cmdidx = CMD_edit;
+		    cmdmod.browse = FALSE;
+		    do_exedit(eap, NULL);
+		    vim_free(p);
+		}
+	    }
+	}
+# endif
+    }
+}
+#endif
+
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index eb6eb25..b6e9488 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -992,7 +992,7 @@
 			RANGE|BANG|EXTRA,
 			ADDR_LINES),
 EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
-			BANG|TRLBAR|SBOXOK|CMDWIN,
+			BANG|TRLBAR|NOTADR|EXTRA|SBOXOK|CMDWIN,
 			ADDR_LINES),
 EX(CMD_omap,		"omap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index 7a24683..edca43e 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -117,7 +117,6 @@
 void write_viminfo_varlist(FILE *fp);
 int store_session_globals(FILE *fd);
 void last_set_msg(scid_T scriptID);
-void ex_oldfiles(exarg_T *eap);
 void reset_v_option_vars(void);
 void prepare_assert_error(garray_T *gap);
 void assert_error(garray_T *gap);
diff --git a/src/proto/ex_cmds.pro b/src/proto/ex_cmds.pro
index b371314..324608f 100644
--- a/src/proto/ex_cmds.pro
+++ b/src/proto/ex_cmds.pro
@@ -65,4 +65,5 @@
 void set_context_in_sign_cmd(expand_T *xp, char_u *arg);
 void ex_smile(exarg_T *eap);
 void ex_drop(exarg_T *eap);
+void ex_oldfiles(exarg_T *eap);
 /* vim: set ft=c : */
diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim
index cbe481c..d4ec6f7 100644
--- a/src/testdir/test_viminfo.vim
+++ b/src/testdir/test_viminfo.vim
@@ -455,3 +455,28 @@
   call delete('Xviminfo')
   silent! bwipe Xtestfileintab
 endfunc
+
+func Test_oldfiles()
+  let v:oldfiles = []
+  let lines = [
+	\ '# comment line',
+	\ '*encoding=utf-8',
+	\ '',
+	\ "> /tmp/file_one.txt",
+	\ "\t\"\t11\t0",
+	\ "",
+	\ "> /tmp/file_two.txt",
+	\ "\t\"\t11\t0",
+	\ "",
+	\ "> /tmp/another.txt",
+	\ "\t\"\t11\t0",
+	\ "",
+	\ ]
+  call writefile(lines, 'Xviminfo')
+  rviminfo! Xviminfo
+  call delete('Xviminfo')
+
+  call assert_equal(['1: /tmp/file_one.txt', '2: /tmp/file_two.txt', '3: /tmp/another.txt'], filter(split(execute('oldfile'), "\n"), {i, v -> v =~ '/tmp/'}))
+  call assert_equal(['1: /tmp/file_one.txt', '2: /tmp/file_two.txt'], filter(split(execute('oldfile file_'), "\n"), {i, v -> v =~ '/tmp/'}))
+  call assert_equal(['3: /tmp/another.txt'], filter(split(execute('oldfile /another/'), "\n"), {i, v -> v =~ '/tmp/'}))
+endfunc
diff --git a/src/version.c b/src/version.c
index e892a95..c2a308d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2231,
+/**/
     2230,
 /**/
     2229,
