diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index e37fdfb..af68a8e 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6000,6 +6000,7 @@
     int		found = FALSE;
     ucmd_T	*cmd;
     int		len;
+    int		over;
     long	a;
     garray_T	*gap;
 
@@ -6019,17 +6020,36 @@
 
 	    /* Put out the title first time */
 	    if (!found)
-		msg_puts_title(_("\n    Name        Args       Address   Complete  Definition"));
+		msg_puts_title(_("\n    Name              Args Address Complete   Definition"));
 	    found = TRUE;
 	    msg_putchar('\n');
 	    if (got_int)
 		break;
 
-	    /* Special cases */
-	    msg_putchar(a & BANG ? '!' : ' ');
-	    msg_putchar(a & REGSTR ? '"' : ' ');
-	    msg_putchar(gap != &ucmds ? 'b' : ' ');
-	    msg_putchar(' ');
+	    // Special cases
+	    len = 4;
+	    if (a & BANG)
+	    {
+		msg_putchar('!');
+		--len;
+	    }
+	    if (a & REGSTR)
+	    {
+		msg_putchar('"');
+		--len;
+	    }
+	    if (gap != &ucmds)
+	    {
+		msg_putchar('b');
+		--len;
+	    }
+	    if (a & TRLBAR)
+	    {
+		msg_putchar('|');
+		--len;
+	    }
+	    while (len-- > 0)
+		msg_putchar(' ');
 
 	    msg_outtrans_attr(cmd->uc_name, HL_ATTR(HLF_D));
 	    len = (int)STRLEN(cmd->uc_name) + 4;
@@ -6037,30 +6057,33 @@
 	    do {
 		msg_putchar(' ');
 		++len;
-	    } while (len < 16);
+	    } while (len < 22);
 
+	    // "over" is how much longer the name is than the column width for
+	    // the name, we'll try to align what comes after.
+	    over = len - 22;
 	    len = 0;
 
-	    /* Arguments */
+	    // Arguments
 	    switch ((int)(a & (EXTRA|NOSPC|NEEDARG)))
 	    {
-	    case 0:			IObuff[len++] = '0'; break;
-	    case (EXTRA):		IObuff[len++] = '*'; break;
-	    case (EXTRA|NOSPC):		IObuff[len++] = '?'; break;
-	    case (EXTRA|NEEDARG):	IObuff[len++] = '+'; break;
-	    case (EXTRA|NOSPC|NEEDARG): IObuff[len++] = '1'; break;
+		case 0:			    IObuff[len++] = '0'; break;
+		case (EXTRA):		    IObuff[len++] = '*'; break;
+		case (EXTRA|NOSPC):	    IObuff[len++] = '?'; break;
+		case (EXTRA|NEEDARG):	    IObuff[len++] = '+'; break;
+		case (EXTRA|NOSPC|NEEDARG): IObuff[len++] = '1'; break;
 	    }
 
 	    do {
 		IObuff[len++] = ' ';
-	    } while (len < 5);
+	    } while (len < 5 - over);
 
-	    /* Range */
+	    // Address / Range
 	    if (a & (RANGE|COUNT))
 	    {
 		if (a & COUNT)
 		{
-		    /* -count=N */
+		    // -count=N
 		    sprintf((char *)IObuff + len, "%ldc", cmd->uc_def);
 		    len += (int)STRLEN(IObuff + len);
 		}
@@ -6068,7 +6091,7 @@
 		    IObuff[len++] = '%';
 		else if (cmd->uc_def >= 0)
 		{
-		    /* -range=N */
+		    // -range=N
 		    sprintf((char *)IObuff + len, "%ld", cmd->uc_def);
 		    len += (int)STRLEN(IObuff + len);
 		}
@@ -6078,9 +6101,9 @@
 
 	    do {
 		IObuff[len++] = ' ';
-	    } while (len < 11);
+	    } while (len < 9 - over);
 
-	    /* Address Type */
+	    // Address Type
 	    for (j = 0; addr_type_complete[j].expand != -1; ++j)
 		if (addr_type_complete[j].expand != ADDR_LINES
 			&& addr_type_complete[j].expand == cmd->uc_addr_type)
@@ -6092,9 +6115,9 @@
 
 	    do {
 		IObuff[len++] = ' ';
-	    } while (len < 21);
+	    } while (len < 13 - over);
 
-	    /* Completion */
+	    // Completion
 	    for (j = 0; command_complete[j].expand != 0; ++j)
 		if (command_complete[j].expand == cmd->uc_compl)
 		{
@@ -6105,12 +6128,13 @@
 
 	    do {
 		IObuff[len++] = ' ';
-	    } while (len < 35);
+	    } while (len < 24 - over);
 
 	    IObuff[len] = '\0';
 	    msg_outtrans(IObuff);
 
-	    msg_outtrans_special(cmd->uc_rep, FALSE);
+	    msg_outtrans_special(cmd->uc_rep, FALSE,
+					     name_len == 0 ? Columns - 46 : 0);
 #ifdef FEAT_EVAL
 	    if (p_verbose > 0)
 		last_set_msg(cmd->uc_script_ctx);
@@ -6344,9 +6368,8 @@
     end = p;
     name_len = (int)(end - name);
 
-    /* If there is nothing after the name, and no attributes were specified,
-     * we are listing commands
-     */
+    // If there is nothing after the name, and no attributes were specified,
+    // we are listing commands
     p = skipwhite(end);
     if (!has_attr && ends_excmd(*p))
     {
diff --git a/src/getchar.c b/src/getchar.c
index b8c7b3f..e8a1f0f 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -4022,7 +4022,7 @@
 	msg_putchar(' ');
 
     /* Display the LHS.  Get length of what we write. */
-    len = msg_outtrans_special(mp->m_keys, TRUE);
+    len = msg_outtrans_special(mp->m_keys, TRUE, 0);
     do
     {
 	msg_putchar(' ');		/* padd with blanks */
@@ -4053,7 +4053,7 @@
 	if (s != NULL)
 	{
 	    vim_unescape_csi(s);
-	    msg_outtrans_special(s, FALSE);
+	    msg_outtrans_special(s, FALSE, 0);
 	    vim_free(s);
 	}
     }
diff --git a/src/menu.c b/src/menu.c
index f71ede9..da03322 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1214,7 +1214,7 @@
 		if (*menu->strings[bit] == NUL)
 		    msg_puts_attr("<Nop>", HL_ATTR(HLF_8));
 		else
-		    msg_outtrans_special(menu->strings[bit], FALSE);
+		    msg_outtrans_special(menu->strings[bit], FALSE, 0);
 	    }
     }
     else
diff --git a/src/message.c b/src/message.c
index fa37df1..e18f952 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1594,7 +1594,8 @@
     int
 msg_outtrans_special(
     char_u	*strstart,
-    int		from)	/* TRUE for lhs of a mapping */
+    int		from,	// TRUE for lhs of a mapping
+    int		maxlen) // screen columns, 0 for unlimeted
 {
     char_u	*str = strstart;
     int		retval = 0;
@@ -1614,6 +1615,8 @@
 	else
 	    text = (char *)str2special(&str, from);
 	len = vim_strsize((char_u *)text);
+	if (maxlen > 0 && retval + len >= maxlen)
+	    break;
 	/* Highlight special keys */
 	msg_puts_attr(text, len > 1
 		&& (*mb_ptr2len)((char_u *)text) <= 1 ? attr : 0);
diff --git a/src/proto/message.pro b/src/proto/message.pro
index 806de87..04b6744 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -35,7 +35,7 @@
 char_u *msg_outtrans_one(char_u *p, int attr);
 int msg_outtrans_len_attr(char_u *msgstr, int len, int attr);
 void msg_make(char_u *arg);
-int msg_outtrans_special(char_u *strstart, int from);
+int msg_outtrans_special(char_u *strstart, int from, int maxlen);
 char_u *str2special_save(char_u *str, int is_lhs);
 char_u *str2special(char_u **sp, int from);
 void str2specialbuf(char_u *sp, char_u *buf, int len);
diff --git a/src/version.c b/src/version.c
index 9d052ab..2fcdef1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1201,
+/**/
     1200,
 /**/
     1199,
