我正在尝试在中创建自己的 Powershell 提示符$profile
。
目前,我有以下内容:
$ESC = [char]27
$RESET = "$ESC[0m"
$pwd = $executionContext.SessionState.Path.CurrentLocation
function prompt {
$fontColor = "2;192;192;192m"
$backColor = "2;64;96;128m"
$shdwColor = "2;32;48;64m"
$main = "$RESET$ESC[38;$fontColor$ESC[48;$backColor"
$shadow = "$RESET$ESC[38;$backColor$ESC[48;$shdwColor"
$end = "$RESET$ESC[38;$shdwColor"
# "$main $pwd $shadow $end ";
# "$main $pwd $shadow $end$RESET ";
# "$main $pwd $shadow $end$ESC[0m ";
# "$main $pwd $shadow $end$ESC[0 ";
# "$main $pwd $shadow $end $RESET";
# "$main $pwd $shadow $end $ESC[0m";
return "$main $pwd $shadow $end $ESC[0";
}
渲染结果如下:
当我输入ls
或dir
(例如)时,一切正常。
但是,当我键入一个字符串时,我的尾随零(从$ESC[0
)显示为红色,而当我关闭字符串时,零的颜色变为白色。
$RESET
当我放置或$ESC[0m
代替$ESC[0
(但用“m”代替“0”)时也会出现这种情况,而当我删除它们时,它会
显示为红色......
我们还可以看到,在默认的 Powershell 提示符中,当我们打开一个字符串时,“>”会变成红色:
有人在制作提示时遇到过同样的问题吗?如果是,您是如何去除这种颜色的,或者您是如何适应的?
谢谢 !
这是因为
PSReadLine
模块的原因。解决方案是在用户按下 Enter 键之前,清空当输入的命令发生解析错误时变为红色的字符集:您可以在 Microsoft Learn 网站上阅读更多内容Set-PSReadLineOption
补充Fabrice SANGA 的有用答案,它提供了一种有效的解决方法:
提示字符串中的最后一个(非空白)字符有时会变为红色,这是一个特征
PSReadLine
:它指示由于所输入的命令中的语法错误而导致的解析器错误,从而向用户提供实时反馈,如果此时提交该命令,则该命令将不起作用。
解决语法错误后,字符应恢复到其原始外观(以表明问题已解决)。
Fabrice 答案中的解决方法避免了该错误,但代价是有效地停用该功能(如果您不关心该功能,这不是问题)。