我总是将我的 Linux 中的提示符设置为这种颜色, 然后我可以在黑色命令窗口中找到我的输入。但是我们可以在我的 Linux 中将提示符设置为相同的颜色吗?电源外壳?
答案1
PowerShell 提示
你想要做的是定制迅速的。
PowerShell 3.0 及更新版本中的默认提示符是:
function prompt
{
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
}
颜色转义序列
现在,Windows 10支持这ANSI 转义代码在其主机中,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
(定义之后)而不是\e
或\033
。
设置彩色提示
综合起来,我们可以在修改后的提示中使用 ANSI 颜色转义码来更改背景颜色:
function prompt
{
$ESC = [char]27
"$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"
}
持久性
如果您希望此信息在会话间持续存在,请将其添加到您的个人资料中(例如.bashrc
)。您可以在中查看您的个人资料路径$profile
。
答案2
除了接受的答案外,另请参阅https://ohmyposh.dev/。它通过将环境的不同方面划分为所谓的“片段”,提供各种颜色提示定制。例如git,天蓝色等。与您在 oh-my-zsh 提示中看到的自定义级别非常相似。
Oh My Posh 是适用于任何 shell 的自定义提示引擎,它能够使用函数或变量调整提示字符串。
主题也适用于已定制的段,并且 Windows/PowerShell 安装只需一行。