Oh-my-posh主题在使用Powerline字体和ConEmu时无法正常工作。

18
我在Windows 7上使用PowerShell作为我的shell。我发现ConEmu是一个非常好的终端。由于我不在Windows 10上,无法使用Windows Terminal,但ConEmu也不错。我了解到posh-git和oh-my-posh以及它们如何定制你的PowerShell体验。我安装了oh-my-posh,Paradox主题看起来很不错。但我在提示符的随机位置看到了一些空白框。paradox-issue 这是我在所有主题中遇到的问题。颜色和设计很漂亮,我想使用它,但那些奇怪的框阻止了我这样做。我还想告诉大家,我正在使用Cascadia Code作为字体,这也是Cascadia Code的Powerline版本。所以,我认为它应该按预期工作。接下来,我尝试修复这个问题,我去了nerdfont.com,并从那里安装了Cascadia Code,而不是从Microsoft的官方GitHub存储库中安装。然后我将ConEmu的字体设置为我从nerdfonts安装的Cascadia,结果如下:enter image description here 这样做更好,因为我可以看到Python符号和一些其他符号,但仍然有一个无法呈现的框。但是,如果我更改存储库,情况会变得更糟:enter image description here “master”后面有一个奇怪的问号。我认为我已经满足了使用oh-my-posh的所有先决条件,比如安装posh-git和PSReadLine以及拥有powerline Cascadia Code字体,并且像他们官方建议的那样使用ConEmu。如果有人能帮助我摆脱这个困境并建议我如何修复我的提示符,我将非常感激。
P.S 我正在使用PowerShell 7 Core。
6个回答

33

当你看到方框时,这意味着字体没有特定的字符,例如有很多专门的字体没有定义每个字符位置。

oh-my-posh GitHub页面中,引用:

如果您安装所选字体后注意到奇怪的字形,请确保这些字形可用(可能它们在字体中的位置不同,如果是这样,请调整正确的$ThemeSettings图标)。如果发现您需要的字符不受支持,请选择其他字体。

同样在oh-my-posh GitHub页面中,所使用的字体是:

我使用Powerline字体,有一个包含它们的很棒的仓库。 我使用Meslo LG M Regular作为Powerline Nerd字体。

如果使用Meslo LG M Regular没有解决问题,则必须手动将图标重新映射到所选字体中的正确Unicode位置。

对于Oh My Posh的版本2,您必须编辑$ThemeSettings变量。请按照GitHub上关于配置主题设置的说明进行操作,例如:

$ThemeSettings.GitSymbols.BranchSymbol = [char]::ConvertFromUtf32(0xE0A0) 

对于Oh My Posh的3.0版本及以上,您需要编辑JSON配置文件进行更改,例如:

...
{
    "type": "git",
    "style": "powerline",
    "powerline_symbol": "\uE0B0",
....

1
由于ps1配置文件仅在PowerShell会话启动时运行,因此更改主题时,您可能需要重新运行$ThemeSettings命令以使更改生效。个人建议将设置保留在配置文件中,因为它们是与“字体”相关的特定设置。如果将它们硬编码到主题的.ps1文件中,则可能会被任何更新覆盖。 - HAL9256
2
简短回答是肯定的。PowerShell控制台与VS Code终端的渲染方式不同。请记住,VS Code是一个Electron应用程序,因此使用多个<canvas>元素来呈现PowerShell终端,或者可以更改为使用DOM进行呈现。试图在两者上实现任何类型的主题都是一种希望和祈祷的事情;-)。 - HAL9256
嗨,感谢你提供所有这些信息和知识。祝你有美好的一天,我会选择你的答案作为正确的答案。 - Arafat Khan
我无法访问$ThemeSettings。它在哪里? - U.Savas
1
@U.Savas $ThemeSettings 在 Oh My Posh 的 版本2 中。Oh My Posh V3 使用 .JSON 文件进行配置,因此不再有 $ThemeSettings 变量。 - HAL9256
显示剩余3条评论

10

发布这篇回复是因为我遵循了@HAL9256的回复,它非常有帮助,但我还需要进一步操作。如果您正在使用Windows终端,实际上您需要设置终端来使用nerd字体。这花费了我太长时间去弄清楚,所以希望它能帮助到下一个人。

在Windows终端中,打开设置,然后选择左侧的“默认值”,接着选择外观选项卡,最后将字体设置为nerd字体

https://www.jondjones.com/media/rhzobluq/customise-your-powershell-prompt-like-a-boss-c.gif

来源:https://www.jondjones.com/tactics/productivity/customise-your-powershell-prompt-like-a-boss/


正如 oh-my-posh 文档建议的那样,我正在更新默认字体系列,而我需要更新特定“Windows 终端”的字体系列。 - Kunal Phaltankar

2

我也遇到了同样的问题,并通过编辑以下文件解决了它:C:\Path\To\Your\WindowsPowerShell\Modules\oh-my-posh\2.0.496\defaults.ps1

PromptSymbols中,应该有一个名为VirtualEnvSymbol的内容。只需将当前值更改为上面列出的值之一即可。例如:

VirtualEnvSymbol = [char]::ConvertFromUtf32(0x26A1)

该文件已不存在。我怀疑OMP 3.x版本更改了此行为,需要在主题JSON文件中进行设置。 - Meteorhead

0
我在这个问题上反复尝试了很多次,试图根据有用的答案重新映射JSON中缺失的代码。
我学到的是,并不是所有的字体都像你想的那样“完整”,但如果你找到了一个合适的字体,就不需要进行任何黑客攻击或修改。
只需安装并使用这个字体Delugia,就可以解决我在pwsh(PowerShell 7.x)和Windows上遇到的所有问题。我已经在Windows终端和VS Code中进行了测试。 https://github.com/adam7/delugia-code

0

0

你能否解释一下为什么这比按照此前的答案安装Microsoft字体更好? - Jack Deeth
那是因为我尝试了级联字体,但它没有起作用,我也尝试了许多其他字体,但这个书呆子字体适用于VS代码、Ubuntu(WSL)以及终端/PowerShell。 - Shubham Freelancer
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - JayPeerachai
这应该是官方答案。其他的方法都最多是脆弱的。这个解决了一切。您需要在Windows Terminal中设置字体,打开“设置”,然后在左侧栏中查找“配置文件”,下面是“默认值”。将字体设置为“CaskaydiaCove Nerd Font Mono”。或者,在单击“Windows终端”中的“设置”时按住SHIFT并编辑JSON:"profiles": { "defaults": { "font": { "face": "CaskaydiaCove Nerd Font Mono" }, "useAtlasEngine": true } } - Daniel Russell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接