diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index c636b7c..e25d60a 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1443,6 +1443,7 @@ tag	      command	      action ~
 |:redir|	:redi[r]	redirect messages to a file or register
 |:redraw|	:redr[aw]	force a redraw of the display
 |:redrawstatus|	:redraws[tatus]	force a redraw of the status line(s)
+|:redrawtabline|	:redrawt[abline]	force a redraw of the tab line
 |:registers|	:reg[isters]	display the contents of registers
 |:resize|	:res[ize]	change current window height
 |:retab|	:ret[ab]	change tab size
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 067ae6e..9173b01 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -30,6 +30,11 @@ CTRL-L			Clear and redraw the screen.  The redraw may happen
 			includes an item that doesn't cause automatic
 			updating.
 
+						*:redrawt* *:redrawtabline*
+:redrawt[abline]	Redraw the tab line.  Useful to update the tab line
+			when 'tabline' includes an item that doesn't cause
+			automatic updating.
+
 							*N<Del>*
 <Del>			When entering a number: Remove the last digit.
 			Note: if you like to use <BS> for this, add this
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index e2b30f2..8a2a085 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1141,6 +1141,9 @@ EX(CMD_redraw,		"redraw",	ex_redraw,
 EX(CMD_redrawstatus,	"redrawstatus",	ex_redrawstatus,
 			BANG|TRLBAR|CMDWIN,
 			ADDR_LINES),
+EX(CMD_redrawtabline,	"redrawtabline",	ex_redrawtabline,
+			TRLBAR|CMDWIN,
+			ADDR_LINES),
 EX(CMD_registers,	"registers",	ex_display,
 			EXTRA|NOTRLCOM|TRLBAR|CMDWIN,
 			ADDR_LINES),
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 55c093f..bd23d18 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -333,6 +333,7 @@ static void	ex_redo(exarg_T *eap);
 static void	ex_later(exarg_T *eap);
 static void	ex_redir(exarg_T *eap);
 static void	ex_redrawstatus(exarg_T *eap);
+static void	ex_redrawtabline(exarg_T *eap);
 static void	close_redir(void);
 static void	ex_mkrc(exarg_T *eap);
 static void	ex_mark(exarg_T *eap);
@@ -9617,6 +9618,26 @@ ex_redrawstatus(exarg_T *eap UNUSED)
 #endif
 }
 
+/*
+ * ":redrawtabline": force redraw of tabline
+ */
+    static void
+ex_redrawtabline(exarg_T *eap UNUSED)
+{
+#if defined(FEAT_WINDOWS)
+    int		r = RedrawingDisabled;
+    int		p = p_lz;
+
+    RedrawingDisabled = 0;
+    p_lz = FALSE;
+    draw_tabline();
+    update_screen(VIsual_active ? INVERTED : 0);
+    RedrawingDisabled = r;
+    p_lz = p;
+    out_flush();
+#endif
+}
+
     static void
 close_redir(void)
 {
diff --git a/src/proto/screen.pro b/src/proto/screen.pro
index f8b14c4..373bec1 100644
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -1,4 +1,5 @@
 /* screen.c */
+void draw_tabline(void);
 void redraw_later(int type);
 void redraw_win_later(win_T *wp, int type);
 void redraw_later_clear(void);
diff --git a/src/screen.c b/src/screen.c
index ea557b9..c71becf 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -165,7 +165,7 @@ static void win_rest_invalid(win_T *wp);
 static void msg_pos_mode(void);
 static void recording_mode(int attr);
 #if defined(FEAT_WINDOWS)
-static void draw_tabline(void);
+void draw_tabline(void);
 #endif
 #if defined(FEAT_WINDOWS) || defined(FEAT_WILDMENU) || defined(FEAT_STL_OPT)
 static int fillchar_status(int *attr, int is_curwin);
@@ -10276,7 +10276,7 @@ recording_mode(int attr)
 /*
  * Draw the tab pages line at the top of the Vim window.
  */
-    static void
+    void
 draw_tabline(void)
 {
     int		tabcount = 0;
