在 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.zip 下载即可,我安装的是 MesloLGMNerdFont-Regular.ttf

安装并配置

.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 pwsh --config "powerlevel10k_rainbow" | Invoke-Expression

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

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

更换字体

在终端中打开“设置” > “配置文件” > Windows PowerShell(或 PowerShell) > “外观” > “字体”
将字体设置为 MesloLGM Nerd Font 并保存,使用多个字体时用逗号(,)隔开,如 Cascadia Mono, MesloLGM Nerd Font

设置终端字体

后记

最终效果

效果

.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