我正在尝试使用 Powershell (v5.1) 的内置 PSReadLine (v2) 模块来自定义 Powershell 控制台文本颜色。
PSReadLine 的早期版本允许您简单地指定任何给定令牌类型-Background
的-Foreground
参数。但情况已不再如此。PSReadLine v2 引入了使用 ANSI 转义码来定义颜色行为。我认为这可以提供更大的灵活性,但它要完成的任务非常复杂。有关这些代码的文档到处都是,并且高度依赖于主机应用程序的实现,这使得找到答案变得更加困难。
简单地为文本前景着色(相对)很容易,例如:
set-psreadlineoption -colors @{
CommandColor = "`e[93m"
CommentColor = "`e[32m"
}
然而,如果你想引入装饰,比如粗体、下划线,或者我特别感兴趣的背景颜色和这些的组合,事情就会变得更加复杂。
SelectionColor
(突出显示具有不同背景颜色的选定文本)的默认值是`e[35;43m
. 但是这个大提示仍然不足以泄露我正在寻找的语法秘密。
Set-PSReadLineOption的文档非常实事求是地指出:
您可以指定其他转义序列,包括:
256 色
24 位色
前景、背景或两者
反色、粗体
...但没有提供示例。
您将如何指定定义前景色和背景色或任何其他颜色和彩色装饰组合的转义码?
我发现有助于了解这些转义码的来源是:http: //jafrog.com/2013/11/23/colors-in-terminal.html https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
但我无法完全理解这些。
解决了:
感谢@LotPings。我错误地假设转义码只能给他们一定数量的选项。事实上,我可以指定任意数量(或实现目标所需的数量)。例如:
$e = [char]0x1b
"$e[38;2;255;128;128;48;2;128;0;255;4mtest$e[0m"
... 将产生单词test
,带有粉红色前景和紫色背景下划线。分解它: