diff --git a/PSReadLine/Cmdlets.cs b/PSReadLine/Cmdlets.cs
index 70de1a71..73ed7009 100644
--- a/PSReadLine/Cmdlets.cs
+++ b/PSReadLine/Cmdlets.cs
@@ -84,6 +84,7 @@ public class PSConsoleReadLineOptions
         public const ConsoleColor DefaultMemberColor    = ConsoleColor.Gray;
         public const ConsoleColor DefaultEmphasisColor  = ConsoleColor.Cyan;
         public const ConsoleColor DefaultErrorColor     = ConsoleColor.Red;
+        public const ConsoleColor DefaultAttributeColor = ConsoleColor.Gray;
 
         // Use dark black by default for the suggestion text.
         // Find the most suitable color using https://stackoverflow.com/a/33206814
@@ -457,6 +458,24 @@ public object PredictionColor
             set => _predictionColor = VTColorUtils.AsEscapeSequence(value);
         }
 
+        public object AttributeColor
+        {
+            get => _attributeColor;
+            set => _attributeColor = VTColorUtils.AsEscapeSequence(value);
+        }
+
+        public object CommandArgumentColor
+        {
+            get => _commandArgumentColor;
+            set => _commandArgumentColor = VTColorUtils.AsEscapeSequence(value);
+        }
+
+        public object LoopLabelColor
+        {
+            get => _loopLabelColor;
+            set => _loopLabelColor = VTColorUtils.AsEscapeSequence(value);
+        }
+
         internal string _defaultTokenColor;
         internal string _commentColor;
         internal string _keywordColor;
@@ -472,24 +491,30 @@ public object PredictionColor
         internal string _errorColor;
         internal string _selectionColor;
         internal string _predictionColor;
+        internal string _attributeColor;
+        internal string _commandArgumentColor;
+        internal string _loopLabelColor;
 
         internal void ResetColors()
         {
             var fg = Console.ForegroundColor;
-            DefaultTokenColor = fg;
-            CommentColor      = DefaultCommentColor;
-            KeywordColor      = DefaultKeywordColor;
-            StringColor       = DefaultStringColor;
-            OperatorColor     = DefaultOperatorColor;
-            VariableColor     = DefaultVariableColor;
-            CommandColor      = DefaultCommandColor;
-            ParameterColor    = DefaultParameterColor;
-            TypeColor         = DefaultTypeColor;
-            NumberColor       = DefaultNumberColor;
-            MemberColor       = DefaultNumberColor;
-            EmphasisColor     = DefaultEmphasisColor;
-            ErrorColor        = DefaultErrorColor;
-            PredictionColor   = DefaultPredictionColor;
+            DefaultTokenColor    = fg;
+            CommentColor         = DefaultCommentColor;
+            KeywordColor         = DefaultKeywordColor;
+            StringColor          = DefaultStringColor;
+            OperatorColor        = DefaultOperatorColor;
+            VariableColor        = DefaultVariableColor;
+            CommandColor         = DefaultCommandColor;
+            ParameterColor       = DefaultParameterColor;
+            TypeColor            = DefaultTypeColor;
+            NumberColor          = DefaultNumberColor;
+            MemberColor          = DefaultNumberColor;
+            EmphasisColor        = DefaultEmphasisColor;
+            ErrorColor           = DefaultErrorColor;
+            PredictionColor      = DefaultPredictionColor;
+            AttributeColor       = DefaultAttributeColor;
+            CommandArgumentColor = fg;
+            LoopLabelColor       = fg;
 
             var bg = Console.BackgroundColor;
             if (fg == VTColorUtils.UnknownColor || bg == VTColorUtils.UnknownColor)
@@ -527,6 +552,9 @@ internal void SetColor(string property, object value)
                         {"Member", (o, v) => o.MemberColor = v},
                         {"Selection", (o, v) => o.SelectionColor = v},
                         {"Prediction", (o, v) => o.PredictionColor = v},
+                        {"Attribute", (o, v) => o.AttributeColor = v},
+                        {"CommandArgument", (o, v) => o.CommandArgumentColor = v},
+                        {"LoopLabel", (o, v) => o.LoopLabelColor = v},
                     };
 
                 Interlocked.CompareExchange(ref ColorSetters, setters, null);
diff --git a/PSReadLine/PSReadLine.format.ps1xml b/PSReadLine/PSReadLine.format.ps1xml
index 9b239328..d1cd46d7 100644
--- a/PSReadLine/PSReadLine.format.ps1xml
+++ b/PSReadLine/PSReadLine.format.ps1xml
@@ -161,10 +161,18 @@ $d = [Microsoft.PowerShell.KeyHandler]::GetGroupingDescription($_.Group)
               <ListItem>
                 <PropertyName>PredictionSource</PropertyName>
               </ListItem>
+              <ListItem>
+                <Label>AttributeColor</Label>
+                <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.AttributeColor)</ScriptBlock>
+              </ListItem>
               <ListItem>
                 <Label>CommandColor</Label>
                 <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommandColor)</ScriptBlock>
               </ListItem>
+              <ListItem>
+                <Label>CommandArgumentColor</Label>
+                <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommandArgumentColor)</ScriptBlock>
+              </ListItem>
               <ListItem>
                 <Label>CommentColor</Label>
                 <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommentColor)</ScriptBlock>
@@ -189,6 +197,10 @@ $d = [Microsoft.PowerShell.KeyHandler]::GetGroupingDescription($_.Group)
                 <Label>KeywordColor</Label>
                 <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.KeywordColor)</ScriptBlock>
               </ListItem>
+              <ListItem>
+                <Label>LoopLabelColor</Label>
+                <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.LoopLabelColor)</ScriptBlock>
+              </ListItem>
               <ListItem>
                 <Label>MemberColor</Label>
                 <ScriptBlock>[Microsoft.PowerShell.VTColorUtils]::FormatColor($_.MemberColor)</ScriptBlock>
diff --git a/PSReadLine/Render.cs b/PSReadLine/Render.cs
index 970e3f77..108b2e03 100644
--- a/PSReadLine/Render.cs
+++ b/PSReadLine/Render.cs
@@ -952,6 +952,9 @@ private string GetTokenColor(Token token)
 
             case TokenKind.Number:
                 return _options._numberColor;
+
+            case TokenKind.Label:
+                return _options._loopLabelColor;
             }
 
             if ((token.TokenFlags & TokenFlags.Keyword) != 0)
@@ -964,6 +967,11 @@ private string GetTokenColor(Token token)
                 return _options._operatorColor;
             }
 
+            if ((token.TokenFlags & TokenFlags.AttributeName) != 0)
+            {
+                return _options._attributeColor;
+            }
+
             if ((token.TokenFlags & TokenFlags.TypeName) != 0)
             {
                 return _options._typeColor;
@@ -974,6 +982,11 @@ private string GetTokenColor(Token token)
                 return _options._memberColor;
             }
 
+            if ((token.Kind == TokenKind.Identifier || token.Kind == TokenKind.Generic) && token.TokenFlags == TokenFlags.None)
+            {
+                return _options._commandArgumentColor;
+            }
+
             return _options._defaultTokenColor;
         }
 
diff --git a/test/HistoryTest.cs b/test/HistoryTest.cs
index 8b071ea1..65dbd5bb 100644
--- a/test/HistoryTest.cs
+++ b/test/HistoryTest.cs
@@ -781,14 +781,14 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "aa",
+                    TokenClassification.CommandArgument, "aa",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 'b', CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "ab",
-                    TokenClassification.None, 'b',
+                    TokenClassification.CommandArgument, 'b',
                     NextLine,
                     statusColors, "bck-i-search: ab_")),
                 'c', CheckThat(() => AssertScreenIs(2,
@@ -806,21 +806,21 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "aa",
+                    TokenClassification.CommandArgument, "aa",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Ctrl_r, CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bb",
+                    TokenClassification.CommandArgument, "bb",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Ctrl_r, CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_"))));
 
@@ -833,7 +833,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 'b',
@@ -841,7 +841,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "ab",
-                    TokenClassification.None, 'c',
+                    TokenClassification.CommandArgument, 'c',
                     NextLine,
                     statusColors, "bck-i-search: ab_"))));
 
@@ -853,14 +853,14 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Ctrl_g,
                 CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
-                    TokenClassification.None, "zed",
+                    TokenClassification.CommandArgument, "zed",
                     NextLine))));
 
             // Test that a random function terminates the search and has an
@@ -872,7 +872,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Alt_d, "zed"));
@@ -886,7 +886,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Escape, "y"));
@@ -900,7 +900,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "ab",
-                    TokenClassification.None, 'b',
+                    TokenClassification.CommandArgument, 'b',
                     NextLine,
                     statusColors, "bck-i-search: ab_")),
                 _.Backspace,
@@ -908,7 +908,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "aa",
+                    TokenClassification.CommandArgument, "aa",
                     NextLine,
                     statusColors, "bck-i-search: a_"))));
 
@@ -919,7 +919,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bc",
+                    TokenClassification.CommandArgument, "bc",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Ctrl_r,
@@ -927,14 +927,14 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bzz",
+                    TokenClassification.CommandArgument, "bzz",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 _.Ctrl_r,
                 CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
-                    TokenClassification.None, "abzz",
+                    TokenClassification.CommandArgument, "abzz",
                     NextLine,
                     statusColors, "failed-bck-i-search: a_")),
                 _.Ctrl_s,
@@ -942,7 +942,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, 'a',
-                    TokenClassification.None, "bzz",
+                    TokenClassification.CommandArgument, "bzz",
                     NextLine,
                     statusColors, "fwd-i-search: a_")),
                 _.Ctrl_g));
@@ -952,7 +952,8 @@ public void InteractiveHistorySearch()
             Test("echo aa1", Keys(_.Ctrl_r, "zz", _.Backspace, _.Backspace, "a1",
                 CheckThat(() => AssertScreenIs(2,
                     TokenClassification.Command, "echo",
-                    TokenClassification.None, " a",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "a",
                     emphasisColors, "a1",
                     NextLine,
                     statusColors, "bck-i-search: a1_"))
@@ -967,7 +968,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "aa",
-                    TokenClassification.None, "2",
+                    TokenClassification.CommandArgument, "2",
                     NextLine,
                     statusColors, "bck-i-search: aa_")),
                 _.Ctrl_r,
@@ -975,7 +976,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "aa",
-                    TokenClassification.None, "1",
+                    TokenClassification.CommandArgument, "1",
                     NextLine,
                     statusColors, "bck-i-search: aa_")),
                 _.Backspace,
@@ -983,7 +984,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "a",
-                    TokenClassification.None, "a2",
+                    TokenClassification.CommandArgument, "a2",
                     NextLine,
                     statusColors, "bck-i-search: a_")),
                 'a', _.Ctrl_r,
@@ -991,7 +992,7 @@ public void InteractiveHistorySearch()
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
                     emphasisColors, "aa",
-                    TokenClassification.None, "1",
+                    TokenClassification.CommandArgument, "1",
                     NextLine,
                     statusColors, "bck-i-search: aa_")),
                 _.Backspace));
diff --git a/test/KillYankTest.cs b/test/KillYankTest.cs
index 72677d51..cd098418 100644
--- a/test/KillYankTest.cs
+++ b/test/KillYankTest.cs
@@ -392,6 +392,7 @@ public void SelectBackwardWord()
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "echo",
                     TokenClassification.None, " ",
+                    TokenClassification.CommandArgument,
                     Selected("foo "), "bar")),
                 _.Delete));
         }
@@ -406,7 +407,9 @@ public void SelectNextWord()
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, Selected("foo"),
                     TokenClassification.None, Selected(" "),
-                    TokenClassification.None, "echo bar")),
+                    TokenClassification.CommandArgument,"echo",
+                    TokenClassification.None," ",
+                    TokenClassification.CommandArgument, "bar")),
                 _.Delete));
         }
 
@@ -419,7 +422,10 @@ public void SelectForwardWord()
                 "foo echo bar", _.Home, _.Alt_F,
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, Selected("foo"),
-                    TokenClassification.None, " echo bar")),
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "echo",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "bar")),
                 _.Delete));
         }
 
@@ -432,7 +438,10 @@ public void SelectShellForwardWord()
                 "a\\b\\c echo bar", _.Home, _.Ctrl_z,
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, Selected("a\\b\\c"),
-                    TokenClassification.None, " echo bar")),
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "echo",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "bar")),
                 _.Delete));
         }
 
@@ -445,7 +454,9 @@ public void SelectShellNextWord()
                 "a\\b\\c echo bar", _.Home, _.Ctrl_z,
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, Selected("a\\b\\c "),
-                    TokenClassification.None, "echo bar")),
+                    TokenClassification.CommandArgument, "echo",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "bar")),
                 _.Delete));
         }
 
@@ -458,7 +469,9 @@ public void SelectShellBackwardWord()
                 "echo bar 'a b c'", _.Ctrl_z,
                 CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "echo",
-                    TokenClassification.None, " bar ",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "bar",
+                    TokenClassification.None, " ",
                     TokenClassification.String, Selected("'a b c'"))),
                 _.Delete));
         }
diff --git a/test/RenderTest.cs b/test/RenderTest.cs
index 1ef7b263..23d8274b 100644
--- a/test/RenderTest.cs
+++ b/test/RenderTest.cs
@@ -61,6 +61,34 @@ public void Render()
                 InputAcceptedNow
                 ));
 
+            Test("", Keys(
+                "[AllowNull()]$R=ls C:\\;:Label while($true){break Label}",
+                _.Home,
+                CheckThat(() =>
+                    AssertScreenIs(1,
+                        TokenClassification.None, "[",
+                        TokenClassification.Attribute, "AllowNull",
+                        TokenClassification.None, "()]",
+                        TokenClassification.Variable, "$R",
+                        TokenClassification.Operator, "=",
+                        TokenClassification.Command, "ls",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "C:\\",
+                        TokenClassification.None, ";",
+                        TokenClassification.LoopLabel, ":Label",
+                        TokenClassification.None, " ",
+                        TokenClassification.Keyword, "while",
+                        TokenClassification.None, "(",
+                        TokenClassification.Variable, "$true",
+                        TokenClassification.None, "){",
+                        TokenClassification.Keyword, "break",
+                        TokenClassification.None, " ",
+                        TokenClassification.Member, "Label",
+                        TokenClassification.None, "}")),
+                _.Ctrl_c,
+                InputAcceptedNow
+                ));
+
             // This tests for priority to highlight a command regardless of token kind and nested tokens potential to bleed the parent token color to the next token
             Test("", Keys(
                 ". -abc def;. abc$name -def",
@@ -69,7 +97,9 @@ public void Render()
                     AssertScreenIs(1,
                         TokenClassification.None, ". ",
                         TokenClassification.Command, "-abc",
-                        TokenClassification.None, " def;. ",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "def",
+                        TokenClassification.None, ";. ",
                         TokenClassification.Command, "abc",
                         TokenClassification.Variable, "$name",
                         TokenClassification.None, " ",
@@ -86,7 +116,8 @@ public void Render()
                     AssertScreenIs(1,
                         TokenClassification.None, ". ",
                         TokenClassification.Command, "++",
-                        TokenClassification.None, " abc",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "abc",
                         TokenClassification.Variable, "$name",
                         TokenClassification.None, " ",
                         TokenClassification.Parameter, "-def")),
@@ -103,7 +134,8 @@ public void Render()
                         TokenClassification.Keyword, "process",
                         TokenClassification.None, " ",
                         TokenClassification.Variable, "$abc",
-                        TokenClassification.None, "\\name | def")),
+                        TokenClassification.CommandArgument, "\\name",
+                        TokenClassification.None, " | def")),
                 _.Ctrl_c,
                 InputAcceptedNow
                 ));
@@ -113,7 +145,9 @@ public void Render()
                 CheckThat(() =>
                     AssertScreenIs(1,
                         TokenClassification.Keyword, "process",
-                        TokenClassification.None, " out put")),
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "out",
+                        TokenClassification.None, " put")),
                 _.Ctrl_c,
                 InputAcceptedNow
                 ));
diff --git a/test/SuggestionTest.cs b/test/SuggestionTest.cs
index 95070bee..de757764 100644
--- a/test/SuggestionTest.cs
+++ b/test/SuggestionTest.cs
@@ -146,7 +146,11 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords()
                 _.Alt_3, _.Ctrl_f,
                 CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "abc",
-                        TokenClassification.None, " def ghi ",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "def",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "ghi",
+                        TokenClassification.None, " ",
                         TokenClassification.Prediction, "jkl")),
                 _.Ctrl_z, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, 'a',
@@ -154,7 +158,11 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords()
                 _.Alt_3, _.Alt_f,
                 CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "abc",
-                        TokenClassification.None, " def ghi ",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "def",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "ghi",
+                        TokenClassification.None, " ",
                         TokenClassification.Prediction, "jkl")),
                 _.Ctrl_z, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, 'a',
@@ -162,7 +170,12 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords()
                 _.Alt_8, _.Alt_f,
                 CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "abc",
-                        TokenClassification.None, " def ghi jkl"))
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "def",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "ghi",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "jkl"))
             ));
         }
 
@@ -179,11 +192,13 @@ public void AcceptSuggestionWithSelection()
                         TokenClassification.Prediction, " diff")),
                 _.RightArrow, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "git",
-                        TokenClassification.None, " diff")),
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "diff")),
                 _.Ctrl_z, CheckThat(() => AssertCursorLeftIs(3)),
                 _.Ctrl_f, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "git",
-                        TokenClassification.None, " diff",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "diff",
                         TokenClassification.Prediction, " --cached")),
 
                 // Perform visual selection and then accept suggestion.
@@ -199,7 +214,8 @@ public void AcceptSuggestionWithSelection()
                 }),
                 _.RightArrow, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "git",
-                        TokenClassification.None, " diff")),
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "diff")),
 
                 // Perform visual selection and then accept next suggestion word.
                 _.Ctrl_z, CheckThat(() => AssertScreenIs(1,
@@ -214,7 +230,8 @@ public void AcceptSuggestionWithSelection()
                 }),
                 _.Ctrl_f, CheckThat(() => AssertScreenIs(1,
                         TokenClassification.Command, "git",
-                        TokenClassification.None, " diff",
+                        TokenClassification.None, " ",
+                        TokenClassification.CommandArgument, "diff",
                         TokenClassification.Prediction, " --cached"))
             ));
         }
@@ -270,15 +287,20 @@ public void HistoryEditsCanUndoProperly()
             Test("git checkout ", Keys(
                 "git ch", CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "git",
-                    TokenClassification.None, " ch",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "ch",
                     TokenClassification.Prediction, "eckout -b branch origin/bbbb")),
                 _.Ctrl_f, CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "git",
-                    TokenClassification.None, " checkout ",
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "checkout",
+                    TokenClassification.None, " ",
                     TokenClassification.Prediction, "-b branch origin/bbbb")),
                 _.Enter, CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "git",
-                    TokenClassification.None, " checkout "))
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "checkout",
+                    TokenClassification.None, " "))
             ));
 
             // Get the last command line from history, and revert the line.
@@ -286,7 +308,9 @@ public void HistoryEditsCanUndoProperly()
             Test("", Keys(
                 _.UpArrow, CheckThat(() => AssertScreenIs(1,
                     TokenClassification.Command, "git",
-                    TokenClassification.None, " checkout ")),
+                    TokenClassification.None, " ",
+                    TokenClassification.CommandArgument, "checkout",
+                    TokenClassification.None, " ")),
                 _.Escape));
         }
 
diff --git a/test/UnitTestReadLine.cs b/test/UnitTestReadLine.cs
index 8abbef29..32f5b814 100644
--- a/test/UnitTestReadLine.cs
+++ b/test/UnitTestReadLine.cs
@@ -51,6 +51,9 @@ public enum TokenClassification
         Member,
         Selection,
         Prediction,
+        Attribute,
+        CommandArgument,
+        LoopLabel,
     }
 
     public abstract partial class ReadLine
@@ -90,36 +93,42 @@ private enum KeyMode
         // so the tests aren't sensitive to tweaks to the default colors.
         internal static readonly ConsoleColor[] Colors = new []
         {
-        /*None*/      ConsoleColor.DarkRed,
-        /*Comment*/   ConsoleColor.Blue,
-        /*Keyword*/   ConsoleColor.Cyan,
-        /*String*/    ConsoleColor.Gray,
-        /*Operator*/  ConsoleColor.Green,
-        /*Variable*/  ConsoleColor.Magenta,
-        /*Command*/   ConsoleColor.Red,
-        /*Parameter*/ ConsoleColor.White,
-        /*Type*/      ConsoleColor.Yellow,
-        /*Number*/    ConsoleColor.DarkBlue,
-        /*Member*/    ConsoleColor.DarkMagenta,
-        /*Selection*/ ConsoleColor.Black,
-        /*Prediction*/ConsoleColor.DarkGreen,
+        /*None*/           ConsoleColor.DarkRed,
+        /*Comment*/        ConsoleColor.Blue,
+        /*Keyword*/        ConsoleColor.Cyan,
+        /*String*/         ConsoleColor.Gray,
+        /*Operator*/       ConsoleColor.Green,
+        /*Variable*/       ConsoleColor.Magenta,
+        /*Command*/        ConsoleColor.Red,
+        /*Parameter*/      ConsoleColor.White,
+        /*Type*/           ConsoleColor.Yellow,
+        /*Number*/         ConsoleColor.DarkBlue,
+        /*Member*/         ConsoleColor.DarkMagenta,
+        /*Selection*/      ConsoleColor.Black,
+        /*Prediction*/     ConsoleColor.DarkGreen,
+        /*Attribute*/      ConsoleColor.DarkCyan,
+        /*CommandArgument*/ConsoleColor.DarkYellow,
+        /*LoopLabel*/      ConsoleColor.DarkGray,
         };
 
         internal static readonly ConsoleColor[] BackgroundColors = new[]
         {
-        /*None*/      ConsoleColor.DarkGray,
-        /*Comment*/   ConsoleColor.DarkBlue,
-        /*Keyword*/   ConsoleColor.DarkCyan,
-        /*String*/    ConsoleColor.DarkGray,
-        /*Operator*/  ConsoleColor.DarkGreen,
-        /*Variable*/  ConsoleColor.DarkMagenta,
-        /*Command*/   ConsoleColor.DarkRed,
-        /*Parameter*/ ConsoleColor.DarkYellow,
-        /*Type*/      ConsoleColor.Black,
-        /*Number*/    ConsoleColor.Gray,
-        /*Member*/    ConsoleColor.Yellow,
-        /*Selection*/ ConsoleColor.Gray,
-        /*Prediction*/ConsoleColor.Cyan,
+        /*None*/           ConsoleColor.DarkGray,
+        /*Comment*/        ConsoleColor.DarkBlue,
+        /*Keyword*/        ConsoleColor.DarkCyan,
+        /*String*/         ConsoleColor.DarkGray,
+        /*Operator*/       ConsoleColor.DarkGreen,
+        /*Variable*/       ConsoleColor.DarkMagenta,
+        /*Command*/        ConsoleColor.DarkRed,
+        /*Parameter*/      ConsoleColor.DarkYellow,
+        /*Type*/           ConsoleColor.Black,
+        /*Number*/         ConsoleColor.Gray,
+        /*Member*/         ConsoleColor.Yellow,
+        /*Selection*/      ConsoleColor.Gray,
+        /*Prediction*/     ConsoleColor.Cyan,
+        /*Attribute*/      ConsoleColor.White,
+        /*CommandArgument*/ConsoleColor.Red,
+        /*LoopLabel*/      ConsoleColor.Magenta,
         };
 
         class KeyHandler
@@ -509,7 +518,8 @@ private void TestSetup(KeyMode keyMode, params KeyHandler[] keyHandlers)
             var tokenTypes = new[]
             {
                 "Default", "Comment", "Keyword", "String", "Operator", "Variable",
-                "Command", "Parameter", "Type", "Number", "Member", "Selection", "Prediction"
+                "Command", "Parameter", "Type", "Number", "Member", "Selection",
+                "Prediction","Attribute","CommandArgument","LoopLabel"
             };
             var colors = new Hashtable();
             for (var i = 0; i < tokenTypes.Length; i++)