diff --git a/src/register.c b/src/register.c
index ccf9b64..554af82 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2161,7 +2161,7 @@
     int		attr;
     char_u	*arg = eap->arg;
     int		clen;
-    char_u      type[2];
+    int		type;
 
     if (arg != NULL && *arg == NUL)
 	arg = NULL;
@@ -2174,9 +2174,9 @@
 	name = get_register_name(i);
 	switch (get_reg_type(name, NULL))
 	{
-	    case MLINE: type[0] = 'l'; break;
-	    case MCHAR: type[0] = 'c'; break;
-	    default:	type[0] = 'b'; break;
+	    case MLINE: type = 'l'; break;
+	    case MCHAR: type = 'c'; break;
+	    default:	type = 'b'; break;
 	}
 	if (arg != NULL && vim_strchr(arg, name) == NULL
 #ifdef ONE_CLIPBOARD
@@ -2213,39 +2213,49 @@
 
 	if (yb->y_array != NULL)
 	{
-	    msg_putchar('\n');
-	    msg_puts("  ");
-	    msg_putchar(type[0]);
-	    msg_puts("  ");
-	    msg_putchar('"');
-	    msg_putchar(name);
-	    msg_puts("   ");
+	    int do_show = FALSE;
 
-	    n = (int)Columns - 11;
-	    for (j = 0; j < yb->y_size && n > 1; ++j)
+	    for (j = 0; !do_show && j < yb->y_size; ++j)
+		do_show = !message_filtered(yb->y_array[j]);
+
+	    if (do_show || yb->y_size == 0)
 	    {
-		if (j)
+		msg_putchar('\n');
+		msg_puts("  ");
+		msg_putchar(type);
+		msg_puts("  ");
+		msg_putchar('"');
+		msg_putchar(name);
+		msg_puts("   ");
+
+		n = (int)Columns - 11;
+		for (j = 0; j < yb->y_size && n > 1; ++j)
 		{
+		    if (j)
+		    {
+			msg_puts_attr("^J", attr);
+			n -= 2;
+		    }
+		    for (p = yb->y_array[j]; *p && (n -= ptr2cells(p)) >= 0;
+									   ++p)
+		    {
+			clen = (*mb_ptr2len)(p);
+			msg_outtrans_len(p, clen);
+			p += clen - 1;
+		    }
+		}
+		if (n > 1 && yb->y_type == MLINE)
 		    msg_puts_attr("^J", attr);
-		    n -= 2;
-		}
-		for (p = yb->y_array[j]; *p && (n -= ptr2cells(p)) >= 0; ++p)
-		{
-		    clen = (*mb_ptr2len)(p);
-		    msg_outtrans_len(p, clen);
-		    p += clen - 1;
-		}
+		out_flush();		    // show one line at a time
 	    }
-	    if (n > 1 && yb->y_type == MLINE)
-		msg_puts_attr("^J", attr);
-	    out_flush();		    // show one line at a time
+	    ui_breakcheck();
 	}
-	ui_breakcheck();
     }
 
     // display last inserted text
     if ((p = get_last_insert()) != NULL
-		 && (arg == NULL || vim_strchr(arg, '.') != NULL) && !got_int)
+		  && (arg == NULL || vim_strchr(arg, '.') != NULL) && !got_int
+						      && !message_filtered(p))
     {
 	msg_puts("\n  c  \".   ");
 	dis_msg(p, TRUE);
@@ -2253,7 +2263,7 @@
 
     // display last command line
     if (last_cmdline != NULL && (arg == NULL || vim_strchr(arg, ':') != NULL)
-								  && !got_int)
+			       && !got_int && !message_filtered(last_cmdline))
     {
 	msg_puts("\n  c  \":   ");
 	dis_msg(last_cmdline, FALSE);
@@ -2261,7 +2271,8 @@
 
     // display current file name
     if (curbuf->b_fname != NULL
-	    && (arg == NULL || vim_strchr(arg, '%') != NULL) && !got_int)
+	    && (arg == NULL || vim_strchr(arg, '%') != NULL) && !got_int
+					&& !message_filtered(curbuf->b_fname))
     {
 	msg_puts("\n  c  \"%   ");
 	dis_msg(curbuf->b_fname, FALSE);
@@ -2273,7 +2284,8 @@
 	char_u	    *fname;
 	linenr_T    dummy;
 
-	if (buflist_name_nr(0, &fname, &dummy) != FAIL)
+	if (buflist_name_nr(0, &fname, &dummy) != FAIL
+						  && !message_filtered(fname))
 	{
 	    msg_puts("\n  c  \"#   ");
 	    dis_msg(fname, FALSE);
@@ -2282,7 +2294,8 @@
 
     // display last search pattern
     if (last_search_pat() != NULL
-		 && (arg == NULL || vim_strchr(arg, '/') != NULL) && !got_int)
+		 && (arg == NULL || vim_strchr(arg, '/') != NULL) && !got_int
+				      && !message_filtered(last_search_pat()))
     {
 	msg_puts("\n  c  \"/   ");
 	dis_msg(last_search_pat(), FALSE);
@@ -2291,7 +2304,7 @@
 #ifdef FEAT_EVAL
     // display last used expression
     if (expr_line != NULL && (arg == NULL || vim_strchr(arg, '=') != NULL)
-								  && !got_int)
+				  && !got_int && !message_filtered(expr_line))
     {
 	msg_puts("\n  c  \"=   ");
 	dis_msg(expr_line, FALSE);
diff --git a/src/testdir/test_filter_cmd.vim b/src/testdir/test_filter_cmd.vim
index 0c45db0..144c7fa 100644
--- a/src/testdir/test_filter_cmd.vim
+++ b/src/testdir/test_filter_cmd.vim
@@ -145,3 +145,30 @@
   bwipe! file.h
   bwipe! file.hs
 endfunc
+
+func Test_filter_display()
+  edit Xdoesnotmatch
+  let @a = '!!willmatch'
+  let @b = '!!doesnotmatch'
+  let @c = "oneline\ntwoline\nwillmatch\n"
+  let @/ = '!!doesnotmatch'
+  call feedkeys(":echo '!!doesnotmatch:'\<CR>", 'ntx')
+  let lines = map(split(execute('filter /willmatch/ display'), "\n"), 'v:val[5:6]')
+
+  call assert_true(index(lines, '"a') >= 0)
+  call assert_false(index(lines, '"b') >= 0)
+  call assert_true(index(lines, '"c') >= 0)
+  call assert_false(index(lines, '"/') >= 0)
+  call assert_false(index(lines, '":') >= 0)
+  call assert_false(index(lines, '"%') >= 0)
+
+  let lines = map(split(execute('filter /doesnotmatch/ display'), "\n"), 'v:val[5:6]')
+  call assert_true(index(lines, '"a') < 0)
+  call assert_false(index(lines, '"b') < 0)
+  call assert_true(index(lines, '"c') < 0)
+  call assert_false(index(lines, '"/') < 0)
+  call assert_false(index(lines, '":') < 0)
+  call assert_false(index(lines, '"%') < 0)
+
+  bwipe!
+endfunc
diff --git a/src/version.c b/src/version.c
index e348c32..718ad65 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2221,
+/**/
     2220,
 /**/
     2219,
