如何给Powershell提示着色?


17

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


控制台字体是什么?
德米特里·库德里亚夫采夫

@DmitryKudriavtsev看这个,也许是辛歌英文。
yode


@DmitryKudriavtsev是的,抱歉,我犯了一个错误。
yode

不是你的错,音译很难
梅德库德里亚夫采夫

Answers:


32

彩色提示的屏幕截图

PowerShell提示

您要做的是自定义提示

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

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

颜色转义序列

现在的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"

可以这样使用:

echo "$([char]27)[46mColoured text"

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

$ESC = [char]27

因此我们可以使用:

"$ESC[46m"

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

在命令中使用它:

echo "$ESC[46mColoured text"

为了恢复原始的颜色设置,我们使用以下代码0

echo "$ESC[46mColoured text$ESC[0mUncoloured text"

更高级的色彩

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

"$ESC[48;2;<r>;<g>;<b>m"

其中<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"  
}

坚持不懈

如果您希望在所有会话中都能保持这种状态,请将其添加到您的个人资料中(如.bashrc)。您可以在中查看个人资料的路径$profile


嗨〜,这是一个伟大answer..But进一步,我们可以使文本是大胆的风格。然后我们就可以更容易找到它..?
yode

1
@yode或多或少全部记录在这里,我在答案中链接了这些;)
Bob的

1
@yode啊。如果与37种非亮白色进行比较,则默认情况下,PowerShell窗口似乎已使用97种亮白色。(顺便说一句,将会有一个新的调色板用于下一个Win10版本的全新安装。当前调色板有一些屏幕截图;请注意,1;37m与相同97m,都表示“亮白色”)
Bob

1
@yode基本上,conhost还不支持粗体。明亮可以替代粗体,并且默认情况下您已经在使用明亮的颜色。如果您确实想要粗体,则可以使用其他终端,例如ConEmu-但是看起来它们对ANSI粗体的支持也不完整。海事组织,这是不值得的麻烦。
鲍勃(Bob)

1
我无法让Markdown正常工作,但是在PowerShell Core中,您可以将backtick + e用于[char]27。我不确定这是否是在早期版本中添加的。
asherber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.