如何修复PowerShell 7搭配oh-my-posh时字体显示异常问题
问题现象
我已安装Windows Terminal并完成oh my posh的配置,所有功能均可正常运行。但当我不通过终端直接启动PowerShell 7时,字体出现乱码,如下图所示:
我已尝试将PowerShell 7的字体替换为Windows Terminal配置.json文件中使用的同款字体,仍有部分内容渲染异常,且该问题也导致我无法在VSCode中正常使用相关配置,异常效果如下图:
解决方案
核心原因
该问题本质是Oh My Posh依赖带图标补丁的Nerd Font字体,独立PowerShell 7控制台、VSCode内置终端和Windows Terminal的字体读取、渲染逻辑存在差异,仅复制字体名称无法保证配置完全生效。
1. 确认字体安装正确性
你安装的字体必须是带Nerd Font后缀的补丁版本,而非普通字体:
- 比如Windows Terminal中常用的
CaskaydiaCove Nerd Font是Cascadia Code的补丁版,普通Cascadia Code不包含Oh My Posh所需的特殊图标 - 安装字体时必须右键选择「为所有用户安装」,避免部分应用权限不足无法读取字体文件
2. 修复独立PowerShell 7控制台配置
- 打开独立PowerShell 7窗口,右键顶部标题栏选择「属性」,切换到字体选项卡,手动选择你安装的完整Nerd Font字体名称,确认保存
- 在PowerShell中执行命令
notepad $PROFILE打开启动配置文件,添加以下配置强制使用UTF-8编码,避免字符解析异常:
[console]::InputEncoding = [console]::OutputEncoding = [System.Text.Encoding]::UTF8
- 确认配置文件中已保留你之前添加的Oh My Posh初始化命令,保存文件后完全关闭PowerShell再重新打开验证
3. 修复VSCode终端配置
- 打开VSCode设置(快捷键
Ctrl+,),搜索terminal.integrated.fontFamily,将配置值改为你使用的Nerd Font完整名称,示例:'CaskaydiaCove Nerd Font Mono', Consolas, 'Courier New', monospace - 可选配置:如果仍有图标挤压问题,可调整
terminal.integrated.fontSize和terminal.integrated.letterSpacing参数适配 - 配置完成后完全关闭VSCode再重新打开验证
4. 兼容Nerd Font版本差异
如果完成上述操作后仍有部分图标乱码,大概率是Nerd Font版本和Oh My Posh主题不匹配:
- 目前Nerd Font v3版本调整了部分旧图标编码,如果你使用的是旧版Oh My Posh主题,可安装Nerd Font v2.x版本的字体,或升级Oh My Posh及对应主题到最新版本即可解决
内容的提问来源于stack exchange,提问作者Taraxiah
相关产品推荐
相关产品推荐

