如何为 Powershell 提示着色?

yod*_*ode 24 command-line windows-10 powershell-5.0

我总是在我的 linux 中提示我使用这种颜色 然后我可以在黑色命令窗口中找到我的输入。但是我们可以在我的Powershell 中制作相同的颜色吗?

Bob*_*Bob 39

彩色提示截图

PowerShell 提示

您要做的是自定义提示

PowerShell 3.0 及更新版本中的默认提示是:

function prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}
Run Code Online (Sandbox Code Playgroud)

颜色转义序列

现在的Windows 10支持ANSI转义代码在其conhost,以及24位色彩的,因为1703的支持。

要使用 ANSI 转义码之一,我们需要一个文字ESC 字符。这是八进制 033 或十进制 27。在 Bash 中,您将使用"\033""\e"; PowerShell 中没有直接等效序列,但您可以嵌入表达式:"$([char]27)"

在 PowerShell Core 中,您可以改用"`e"转义序列。感谢 asherber 的评论。


在 PowerShell 中使用

例如,这意味着您可以使用以下转义序列将背景颜色设置为青色,代码46如下:

"$([char]27)[46m"
Run Code Online (Sandbox Code Playgroud)

可以这样使用:

echo "$([char]27)[46mColoured text"
Run Code Online (Sandbox Code Playgroud)

为了使事情更具可读性,让我们定义一个变量:

$ESC = [char]27
Run Code Online (Sandbox Code Playgroud)

所以我们可以使用:

"$ESC[46m"
Run Code Online (Sandbox Code Playgroud)

哪里$ESC是文字 ESC 字符,[定义参数列表的开始和m结束。

在命令中使用它:

echo "$ESC[46mColoured text"
Run Code Online (Sandbox Code Playgroud)

为了恢复原始颜色设置,我们改用代码0

echo "$ESC[46mColoured text$ESC[0mUncoloured text"
Run Code Online (Sandbox Code Playgroud)

更高级的颜色

如果您对基本的 16 色调色板不满意,您可以使用完整的 24 位颜色的形式:

"$ESC[48;2;<r>;<g>;<b>m"
Run Code Online (Sandbox Code Playgroud)

哪里<r>是从0-255红色,十进制值<g>的绿色和<b>蓝色,如"$ESC[48;2;255;0;123m"

请参阅文档以获取更多信息。

事实上,这一切都直接等同于您在 bash 中所做的一切,只是您需要使用$ESC(在定义之后)而不是\eor \033


设置彩色提示

将这些放在一起,我们可以在修改后的提示中使用 ANSI 颜色转义码来更改背景颜色:

function prompt  
{  
    $ESC = [char]27
    "$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"  
}
Run Code Online (Sandbox Code Playgroud)

坚持

如果您希望这在会话中持续存在,请将其添加到您的个人资料中(如.bashrc)。您可以在 中查看您的个人资料的路径$profile

  • 我无法让 Markdown 正常工作,但在 PowerShell Core 中,您可以使用反引号+e 来表示“[char]27”。我不确定这是否是在早期版本中添加的。 (2认同)