我试图使用Powershell(v5.1)的内置PSReadLine(v2)模块自定义Powershell控制台文本颜色。
以前的PSReadLine版本允许您简单地为任何给定的令牌类型指定-Background和-Foreground参数。但现在不再是这样了。 PSReadLine v2引入了使用ANSI转义代码来定义颜色行为。我认为这可以提供更大的灵活性,但它对于其所要实现的目标而言过于复杂。关于这些代码的文档散落各地,并且高度依赖于主机应用程序的实现,这使得查找答案更加困难。
只是简单地着色文本前景(相对而言)很容易,比如:
然而,如果你想引入修饰,如加粗、下划线或者与我特别相关的背景颜色和这些颜色的组合,事情就变得更加复杂了。
标准的
“你可以指定其他的转义序列,包括:256种颜色、24位颜色、前景、背景或两者兼有、反相、加粗。”
然而,没有提供任何例子。
你会如何指定定义前景和背景颜色以及任何其他颜色和彩色装饰的转义码?
我在学习这些转义码方面发现有用的来源是: http://jafrog.com/2013/11/23/colors-in-terminal.html https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters 但我一直没有完全理解这些内容。 已解决: 感谢@LotPings。我错误地认为转义码只能有一组给定的选项。实际上,我可以指定任意数量的选项(或者需要实现我的目标的任意数量)。例如:
这段代码将导致单词
以前的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
被下划线标记,前景色为粉色,背景色为紫色。具体解释如下:原始答案:Original Answer
Esc[40;1m
有一个黄色的前景色呢?这只是因为Powershell控制台将粗体(;1
)渲染为黄色,而不渲染斜体(;3
)吗?实际上是否有一种同时指定前景和背景颜色的方法?我也无法解码默认的SelectionColor
(Esc[35;43
)为什么会以这种方式渲染。 - undefined$Esc=[char]0x1b;"$Esc[91;102mEsc[91;102m$Esc[0m"
。 - user6811411get-psreadlineoption
,然后输入set-psreadlineoption -colors @{stringcolor='red'}
,再次输入get-psreadlineoption
,stringcolor
的值并没有改变,字符串仍然使用默认颜色。我使用方法有问题吗? - undefined$e=[char]0x1b; "$e[91;103;4mtest$e[0m"
会导致单词“test”具有红色前景、绿色背景和下划线。现在我只需要弄清楚如何让set-psreadlineoption
保存我的更改。 - undefinedset-psreadlineoption -colors
的使用有误。colors
哈希表使用的是像string
而不是stringcolor
这样的名称,尽管get-psreadlineoption
将它们显示为stringcolor
。 - undefined