在 Windows 中为 PowerShell 配置 Oh My Posh

前言

使用 Windows 的时候我们或多或少会接触到 CMD 或 (Windows) PowerShell 等命令行工具,使用命令行工具时难免会觉得单调,这时就可以给 (Windows) PowerShell 配置 Oh My Posh 以美化,使其使用更加顺手及美观

准备工具

  1. 可选,(Windows 11 及更高版本自带):
    Windows Terminal(最低支持 Windows 10 19041,即 Windows 10 2004。老版本最低支持到 Windows 10 17763,即 Windows 10 1809)

  2. 可选:
    PowerShell,推荐使用 MSI 包安装
    扩展阅读:Windows PowerShell 5.1 和 PowerShell 7.x 之间的差异 - Microsoft Learn
    Oh My Posh 支持 Windows PowerShell 和 PowerShell,你可以选择只在 Windows PowerShell 中配置

  3. Oh My Posh
    推荐选择 install-arm64.msi(ARM64)或 install-x64.msi(64 位),
    推荐选择 install-arm64.msix(ARM64)或 install-x64.msix(64 位)

    若你不知道你的 Windows 架构,请参阅:检查 CPU 与 Windows 的架构

  4. Nerd Fonts
    官方推荐使用 MesloLG Nerd Font,选择 Meslo.tar.xz 或 Meslo.zip 下载,将其解压后安装即可(Melso.tar.xz 最小)
    我使用的主题为 powerlevel10k_rainbow,故安装的是 MesloLGMNerdFontMono-Regular.ttf

    关于字体的选择

    以下为 Gemini 3.8 Flash Low 对于 Meslo.tar.xz 下字体的解释

    1. 基础尺寸与行高(LG 后面的字母:S / M / L)
      代表 Line Gap(行距/行高):
      • LGS (Small):紧凑行距,行间距最小,单屏能显示的代码行数最多。
      • LGM (Medium):中等行距,平衡型。
      • LGL (Large):宽松行距,行间距最大,呼吸感更强。
    2. 数字 0 的显示样式(是否带 DZ)
      • 无 DZ:数字 0 内部是斜杠(Slashed Zero: 0̸)。
      • 带 DZ (Dotted Zero):数字 0 内部是实心圆点(0̇),便于与字母 O 区分。
    3. 图标与字宽策略((无) vs Mono vs Propo)
      Nerd Font 引入了几千个特殊开发图标(Git、Docker、文件夹等),这三者决定了这些图标的宽度占用:
      后缀 图标占用宽度 适用场景
      无后缀 (标准版,如 MesloLGS Nerd Font) 双倍字宽 (2格) 最推荐日常使用(Terminal、VS Code 等主流环境完美兼容,图标大且清晰)。
      Mono (如 MesloLGS Nerd Font Mono) 严格单倍字宽 (1格) 适用于某些强制要求所有字符必须严格等宽、否则图标会乱码或重叠的老旧终端。缺点是部分复杂图标压缩后偏小。
      Propo (如 MesloLGS Nerd Font Propo) 比例宽度 (不定宽) 仅适合纯文本编辑器、聊天或 UI 界面,不适合严苛对齐的终端命令行。
    4. 字重与斜体
      • Regular:常规体
      • Bold:粗体
      • Italic:斜体
      • BoldItalic:粗斜体
    5. 选择建议
      VS Code / Windows Terminal / iTerm2 等主流终端:直接选择 MesloLGS Nerd Font(或习惯大行距选 LGM / LGL)。
      喜欢点状 0 而非斜杠 0:选择带 DZ 的版本(如 MesloLGSDZ Nerd Font)。
      使用 Oh My Posh / Powerlevel10k (p10k):官方通常推荐直接安装 MesloLGS Nerd Font。

安装并配置

仅 .MSI 安装需要配置环境变量,.MSIX 安装不需要配置环境变量

MSI 安装程序配置环境变量

安装完成 Oh My Posh 后,按下 WIN + R 以打开“运行”,输入 %LocalAppData%\Programs\oh-my-posh\bin 后按下 Enter 以回车,在打开的文件资源管理器窗口中右键顶部的地址栏,并选择“复制地址”

复制 Oh My Posh 安装路径

再次按下 WIN + R 以打开“运行”,输入 SystemPropertiesAdvanced.exe 后按下 Enter 以回车来打开“高级系统设置”
点击右下角的“环境变量(N)…”,在“系统变量(S)”中找到 Path 的变量,并点击“编辑(I)…”,点击右边的“新建(N)”,将复制的 Oh My Posh 安装路径粘贴进去

设置 Oh My Posh 环境变量

初始化

推荐使用自动寻找主题文件路径的方案

在(Windows)PowerShell 中输入代码以创建配置文件

1
notepad.exe $PROFILE
如果没有此文件,则通过命令手动创建
1
New-Item -Path $PROFILE -Type File -Force

在打开空白的配置文件后,将以下代码内容粘贴并保存

自动寻找主题文件路径(推荐):

1
oh-my-posh.exe init pwsh --config "jandedobbeleer" | Invoke-Expression

带有指定的主题文件路径:

1
oh-my-posh.exe init pwsh --config "$Env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression
若是 Windows PowerShell

自动寻找主题文件路径(推荐):

1
oh-my-posh.exe init powershell --config "jandedobbeleer" | Invoke-Expression

带有指定的主题文件路径:

1
oh-my-posh.exe init powershell --config "$Env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression
  1. Windows PowerShell 的配置文件将会存储在:
    %UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
  2. PowerShell 的配置文件将会存储在:
    %UserProfile%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
  3. 主题配置储存在:
    $Env:POSH_THEMES_PATH,即 %LocalAppData%\Programs\oh-my-posh\themes,即 C:\Users\<用户名>\AppData\Local\Programs\oh-my-posh\themes

完成后输入命令或重启终端/(Windows)PowerShell 以应用主题

1
. $PROFILE

美化

更换主题

若没有正确存放主题文件,则会提示 CONFIG NOT FOUND。使用 .MSI 安装的 Oh My Posh 会将主题存放在 %LocalAppData%\Programs\oh-my-posh\themes 下,使用 .MSIX 安装的 Oh My Posh 则弃用了这个特性,在配置文件中使用 --config "<主题名称>" 即可,此方法同样适用于 .MSI[3]

从官网查看主题:https://ohmyposh.dev/docs/themes
从终端查看主题:Get-PoshThemes

打开配置文件,并替换其中的 jandedobbeleer 字段
例如我更换主题为 powerlevel10k_rainbow,那么配置文件的代码是这样

自动寻找主题文件路径(推荐):

1
oh-my-posh.exe init pwsh --config "powerlevel10k_rainbow" | Invoke-Expression

带有指定的主题文件路径:

1
oh-my-posh.exe init pwsh --config "$Env:POSH_THEMES_PATH/powerlevel10k_rainbow.omp.json" | Invoke-Expression
若是 Windows PowerShell

自动寻找主题文件路径(推荐):

1
oh-my-posh.exe init powershell --config "powerlevel10k_rainbow" | Invoke-Expression

带有指定的主题文件路径:

1
oh-my-posh.exe init powershell --config "$Env:POSH_THEMES_PATH/powerlevel10k_rainbow.omp.json" | Invoke-Expression

更换字体

Windows 终端

在终端中打开“设置” > “配置文件” > “默认值”(或 Windows PowerShell,或 PowerShell,“默认值”为全局) > “外观” > “字体”
将字体设置为 MesloLGM Nerd Font Mono 并保存,使用多个字体时用逗号(,)隔开,如 MesloLGM Nerd Font Mono, Cascadia Mono
推荐将 MesloLGM Nerd Font Mono 设为首个字体,避免图标被其他字体所覆盖,但是会导致 Windows 终端默认启动窗口偏大

设置 Windows 终端字体

VS Code

在 VS Code 中,按下 CTRL + ,,在“设置”顶部的搜索框中,输入 terminal.integrated.fontFamily
将字体设置为 'MesloLGM Nerd Font Mono' 并保存,使用多个字体时用逗号(,)隔开,含有空格的字体要用单引号包裹(''),如 'MesloLGM Nerd Font Mono', 'Cascadia Mono', monospace
推荐将 MesloLGM Nerd Font Mono 设为首个字体,避免图标被其他字体所覆盖

设置 VS Code 终端字体

后记

最终效果

Windows 终端

.MSI 的方式安装的应该不限制 Windows 的版本,或许 Windows 7 都能用(?)
自 Windows 10 版本 1709 起,Windows 才支持 .MSIX,早于 Windows 10 版本 1709 的 Windows,请参阅:MSIX 核心 - MSIX | Microsoft Learn
对于 Windows 7/8/8.1,建议尝试更新 Windows PowerShell 版本,请参阅:升级 Windows PowerShell 版本

参考文献

  1. PowerShell 美化——oh-my-posh 的配置与使用 - 地衣君的Blog
  2. 云萧的咕咕屋(技术支持)
  3. Customize | Oh My Posh