【问题标题】:How to change font properties in PowerShell 5?如何在 PowerShell 5 中更改字体属性?
【发布时间】:2019-11-17 08:10:38
【问题描述】:

我想将使用Write-Host 打印的路径的字体设置为粗体。我可以灵活地使用其他方法,例如 echo 或其他方法。

我尝试了其他方法,如Write-Debug 等,还检查了模块WindowsConsoleFonts。 但是它们都不支持字体属性,例如在打印时将它们设为粗体或斜体。

$pathString = "[" + (Get-Location) + "]"
Write-Host $pathString -ForegroundColor Cyan

我使用的是不支持 MarkDown 渲染的 PowerShell 5.1,否则我会使用 Markdown 来完成。

【问题讨论】:

  • 这不是因为缺少可用的模块 - Windows 控制台主机不支持单个字符或单词的可变字体,所以你要求的可能是不可能的

标签: windows powershell shell


【解决方案1】:

您可以通过VT (Virtual Terminal) escape sequences实现粗体文本。

但是,常规 Windows 控制台窗口 (conhost.exe)不支持斜体,它们即将推出的继任者也不支持, Windows Terminal(至少在撰写本文时)。[1]

在最新版本的 Windows 10 中,默认情况下在 Windows PowerShell 和 PowerShell Core 中都启用了对 VT 序列的支持。

但是,Write-Host 不支持它们,因此您必须将转义序列直接嵌入到传递给 Write-Host 的字符串中(或发送到成功输出流的字符串,如果它进入控制台):

注意:

  • 我在下面的示例中省略了Write-Host,因为它不是绝对必要的,但通常确实应该将彩色文本写入显示器(主机),而不是成功输出流。

  • 虽然最好始终使用 VT 序列来满足所有格式需求(包括颜色),但可以将它们与 Write-Host -ForegroundColor /-BackgroundColor` 结合使用。

PowerShell 核心:

PowerShell Core 支持通过`e 转义序列直接 在"..."(双引号字符串)中嵌入转义序列,该转义序列扩展为文字 ESC 字符,即 启动一个 VT 转义序列。

"To `e[1mboldly`e[m go ..., in `e[36mcyan`e[m."

Windows PowerShell:

不支持`e;最简单的解决方案是使用\e 作为占位符并使用-replace 替换实际的ESC 字符(Unicode 代码点0x1b):

"To \e[1mboldly\e[m go ..., in \e[36mcyan\e[m." -replace '\\e', [char] 0x1b

[1] 在 PowerShell Core 中,您可以运行以下测试命令来查看单词 italics 是否以斜体打印:
"`e[3mitalics`e[m after"
请注意,在 ma​​cOS 和至少在某些 Linux 发行版中支持终端中的斜体;例如,Ubuntu 18.04

【讨论】:

  • 并没有真正做到我想要的,但我相信没有解决方案。我认为这是我们在 powershell 中可以做的最好的事情,谢谢!
  • 谢谢,@kr9s8n1。所以你也在寻找斜体,可能还有其他格式?还是主要是必须嵌入转义序列才是问题所在?
  • 是的,我正在寻找一些额外的格式,包括斜体,它帮助我找到了正确的方向!
猜你喜欢
  • 1970-01-01
  • 2016-05-25
  • 2022-12-31
  • 2012-02-05
  • 1970-01-01
  • 2023-04-08
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多