![在 Powershell 提示符中使用 ANSI 转义码添加颜色,在执行某些控制台进程(如 git)后失去意义](https://linux22.com/image/1545004/%E5%9C%A8%20Powershell%20%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%AD%E4%BD%BF%E7%94%A8%20ANSI%20%E8%BD%AC%E4%B9%89%E7%A0%81%E6%B7%BB%E5%8A%A0%E9%A2%9C%E8%89%B2%EF%BC%8C%E5%9C%A8%E6%89%A7%E8%A1%8C%E6%9F%90%E4%BA%9B%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BF%9B%E7%A8%8B%EF%BC%88%E5%A6%82%20git%EF%BC%89%E5%90%8E%E5%A4%B1%E5%8E%BB%E6%84%8F%E4%B9%89.png)
我创建了一个 powershell 配置文件,它可以修改提示以添加一些颜色(取决于 git 分支等)。
一切看起来都很好,直到我执行了一个控制台程序(如 git),它也输出彩色文本。此后,Powershell 似乎决定逐字输出转义码。
附上一张截图更容易理解:
- 是我运行 git 之前的输出,注意文本“colorized >”的彩色输出
- 是我运行 git 后的输出,注意转义码是逐字输出的
这是我的 Powershell 配置文件:
function prompt {
"" + [char]0x001b + "[35m colorized >" + [char]0x001b + "[0m"
}
是否有技巧可以重新启用 ANSI 代码的功能,或者这只是 Powershell 或 git 输出文本的一些怪癖?请注意,git 只是一个例子,我发现有几个程序搞砸了这一点,但并不是所有的程序都是这样。
例如,MSBuild 就运行良好。
答案1
哦嘿!当我兴奋地用 ANSI 给所有东西上色时,我自己也遇到了这个问题。
首先,我拍摄了这张照片(不记得最初是怎么偶然发现它的,但非常感谢原始编码员)https://github.com/bozho/AnsiColorOut/blob/master/AnsiColorOut/Console.cs
然后在我的个人资料中我确保添加它
Add-Type -Path C:\Users\audaxdreik\Documents\WindowsPowerShell\Console.cs
然后,我在我的个人资料中为经常使用的已知问题程序创建一个快速自定义包装器,即 git
$gitPath = (Get-Command -Name git).Source
function git {
& $gitPath $args
[Bozho.PowerShell.Console]::EnableVirtualTerminalProcessing()
}