Windows 11 终端美化完全指南
适用环境:Windows 11 22H2 及以上、Windows Terminal 1.20+、PowerShell 7.2+ 标签栏 UI 主题:需要 Windows Terminal 1.24 及以上(见 3.5 节) 目标:从「白底黑字、满屏方块」到「毛玻璃、Nerd 图标、Git 状态、智能补全」的现代化终端 阅读方式:赶时间 → 看第 2 章「10 分钟速通」;想一次搞明白 → 从第 0 章顺序读
效果图
写在前面
这是一篇从零开始的 Windows 11 终端美化教程,覆盖 Windows Terminal 外观、Nerd Font、Oh My Posh 提示符、PSReadLine 补全、常用命令行工具,以及一套可以直接使用的 profile。
文中以 Catppuccin Mocha 和 Tokyo Night Storm 两套配色为例,但所有步骤都不绑定具体主题:你可以换成任意喜欢的配色和 OMP 主题。
本文以较新的 Windows Terminal 和 Oh My Posh 版本为例;遇到版本差异时,文中会注明兼容范围。
- 不需要重装系统,所有配置都在用户目录
- 每一步都可以单独回滚,文末有卸载与恢复章节
- 命令默认在 PowerShell 7 中执行,不是 Windows PowerShell 5.1
目录
- 0. 先搞清楚:你到底在美化什么
- 1. 环境自检
- 2. 10 分钟速通(懒人版)
- 3. 第 1 步:Windows Terminal 配置
- 4. 第 2 步:Nerd Font 字体
- 5. 第 3 步:Oh My Posh 提示符
- 6. 第 4 步:PSReadLine 补全与预测
- 7. 第 5 步:效率工具全家桶
- 8. 第 6 步:完整 profile 模板
- 9. 第 7 步:统一配色
- 10. 进阶玩法
- 11. 排错手册
- 12. 回滚与卸载
- 附录 A:把配置固化成脚本(可选)
- 附录 B:命令速查表
0. 先搞清楚:你到底在美化什么
很多人一上来就抄一堆配置,结果不知道哪一层出了问题。终端美化其实只有四层:
┌─────────────────────────────────────────────────────┐
│ Windows Terminal(终端宿主) │
│ 负责:窗口、标签、字体渲染、配色、透明度、背景图 │
│ ┌───────────────────────────────────────────────┐ │
│ │ PowerShell 7(Shell) │ │
│ │ 负责:执行命令、历史记录、补全、语法高亮 │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Oh My Posh(提示符框架) │ │ │
│ │ │ 负责:路径、Git 分支、耗时、版本号… │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
│ 字体(Nerd Font):提供箭头、文件/语言图标与等宽对齐 │
└─────────────────────────────────────────────────────┘
| 层 | 组件 | 出问题时你会看到 |
|---|---|---|
| 终端宿主 | Windows Terminal | 配色不对、不透明、字体选不到 |
| Shell | PowerShell 7 | 命令不生效、profile 报错 |
| 提示符 | Oh My Posh | 提示符还是老的 PS C:\> |
| 字体 | Nerd Font | 满屏 □、?,图标错位 |
正确顺序:终端 → 字体 → 提示符 → 补全 → 工具链。 字体不对,后面所有图标都会变成方块——这是新手最常见的翻车点。
1. 环境自检
先花 1 分钟确认现状。在 PowerShell 7 里执行(不是 Windows PowerShell 5.1):
# 1. PowerShell 版本,应为 7.x
$PSVersionTable.PSVersion
# 2. Windows Terminal 是否存在
(Get-Command wt.exe).Source
# 3. PowerShell 7 的配置文件路径(不存在是正常的)
$PROFILE
Test-Path $PROFILE
# 4. 执行策略,RemoteSigned 即可
Get-ExecutionPolicy -List
# 5. 是否已装 Nerd Font(有输出说明装过)
@(
(Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts').PSObject.Properties.Name
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts').PSObject.Properties.Name
) | Where-Object { $_ -match 'Nerd|NF|Maple|Cascadia|Sarasa|Meslo' } | Sort-Object -Unique
怎么判断自己的环境:
| 检查项 | 正常情况 |
|---|---|
| PowerShell | 7.x;如果只有 5.1,需要先安装 PowerShell 7 |
| Windows Terminal | Get-Command wt.exe 有结果 |
| PowerShell 7 profile | 路径不存在也正常,第 8 章会创建 |
| Nerd Font | 没装也没关系,第 4 章会装 |
| 执行策略 | RemoteSigned 或 Unrestricted 都可以 |
只要 PowerShell 7 和 Windows Terminal 就位,其他组件都可以边做边装。本文不要求先清理旧配置;profile 和 settings.json 都是纯文本,改坏了可以恢复。
⚠️ 两个 PowerShell 不要搞混
Windows PowerShell 5.1:系统自带,profile 在Documents\WindowsPowerShellPowerShell 7:你装的,profile 在Documents\PowerShell本文所有配置都写在 7 的 profile 里;在 5.1 里不生效是正常的。
2. 10 分钟速通(懒人版)
只想快速变好看,按这 5 步走,细节后面章节再补:
# ① 装 Oh My Posh(已装可跳过)
winget install --id JanDeDobbeleer.OhMyPosh -e --source winget --accept-package-agreements --accept-source-agreements
# ② 装字体(交互式列表,方向键选 CascadiaCode 回车;中文用户见第 4 章)
oh-my-posh font install
# ③ 复制全部主题,写入当前主题,再创建 profile
$ompThemes = if ($env:POSH_THEMES_PATH) { $env:POSH_THEMES_PATH } else { (Get-AppxPackage ohmyposh.cli).InstallLocation + '\themes' }
New-Item -ItemType Directory "$HOME\.config\oh-my-posh" -Force | Out-Null
Copy-Item "$ompThemes\*.omp.json" -Destination "$HOME\.config\oh-my-posh" -Force
Set-Content "$HOME\.config\oh-my-posh\active-theme.txt" 'catppuccin_mocha' -Encoding utf8
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE # 粘贴第 8 章的模板,保存
如果
Get-AppxPackage报「拒绝访问」,用 5.3 节的Get-OmpThemesDir函数代替。
④ 打开 Windows Terminal → Ctrl + , → 外观 → 字体选 Cascadia Code NF(以字体下拉框里显示的名字为准,中文用户选 Maple Mono NF CN),字号 11。配色方案想用 Catppuccin 的话,先把 3.5 节的 JSON 加进 schemes;懒得改就先选内置的 One Half Dark。
⑤ 关掉所有终端标签页,重新打开。应该能看到带图标、带 Git 信息的提示符了。
想更精致(毛玻璃、Catppuccin 配色、智能补全、ll/z/fzf),继续往下读。
3. 第 1 步:Windows Terminal 配置
3.1 把 Windows Terminal 设为默认终端
不设置的话,双击 .ps1、从「运行」启动 cmd 等场景仍会弹出老旧的 conhost 窗口。
方式一(推荐):Windows 设置 → 系统 → 开发者选项 → 找到 终端 → 默认终端应用程序选 Windows Terminal。
方式二:Windows Terminal → Ctrl + , → 启动 → 默认终端应用程序 → Windows Terminal。
3.2 默认打开 PowerShell 7
Ctrl + , → 启动 → 默认配置文件 → 选 PowerShell(图标是黑色 >_ 的那个,不是 Windows PowerShell)。
顺手把 启动时 设为「最大化」或「默认」,看你习惯。
3.3 找到并备份 settings.json
Windows Terminal 的所有外观最终都落在 settings.json 里。GUI 能改的只是子集,透明毛玻璃、背景图、滚动条隐藏、抗锯齿这些必须改 JSON。
Ctrl + , → 左下角 打开 JSON 文件。文件通常在:
# Store 版(绝大多数人)
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
# 非 Store 版(winget / scoop / 便携版)
%LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json
备份(强烈建议,改坏了能秒回滚):
$wt = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
if (Test-Path $wt) {
Copy-Item $wt "$wt.bak" -Force
"已备份到 $wt.bak"
} else {
"没找到 Store 版配置,检查 %LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json"
}
💡 也可以直接编辑:
code $wt(需要 VS Code),或者notepad $wt。
3.4 外观:核心 JSON
在 settings.json 里找到 "profiles" → "defaults"。没有 defaults 就手动加一个,然后把下面这些键合并进去(已有同名键就改值,别重复写):
"profiles":
{
"defaults":
{
"font":
{
"face": "Maple Mono NF CN",
"size": 11,
"weight": "normal"
},
"colorScheme": "Catppuccin Mocha",
"opacity": 88,
"useAcrylic": true,
"padding": "10, 10, 8, 10",
"cursorShape": "bar",
"antialiasingMode": "grayscale",
"scrollbarState": "hidden",
"intenseTextStyle": "bright",
"copyOnSelect": true,
"multiLinePasteWarning": false
}
}
上面只是示意结构。实际编辑时:
profiles下如果已有defaults,只把里面的键合并进去;list数组保持原样不动。
逐条解释:
| 键 | 作用 | 建议 |
|---|---|---|
font.face | 字体名,必须和系统里完全一致 | Maple Mono NF CN / Cascadia Code NF |
font.size | 字号 | 1080p 用 11,2K 用 12,4K 用 13–14 |
font.weight | 字重 | normal;高分屏可试 light |
colorScheme | 配色方案名 | 见 3.5 |
opacity | 不透明度 0–100 | 85–92 比较舒服,太低费眼 |
useAcrylic | 亚克力毛玻璃 | true;老显卡觉得卡就改 false |
padding | 内边距,左、上、右、下 | "10, 10, 8, 10" 留白刚好 |
cursorShape | 光标形状 | bar(竖线)/ filledBox(方块)/ doubleUnderline |
antialiasingMode | 抗锯齿 | grayscale 对细字体更清晰;cleartype 更锐利 |
scrollbarState | 滚动条 | hidden 最干净;需要时改 visible(旧版 WT 可能不支持) |
intenseTextStyle | 加粗颜色增强 | bright 让 16 色更鲜艳 |
copyOnSelect | 选中即复制 | true 谁用谁知道 |
multiLinePasteWarning | 多行粘贴警告 | false 少一次回车 |
defaults对所有 profile 生效(包括 cmd、WSL)。如果只想改 PowerShell 7,把同样的键写进profiles.list里对应那一项。
3.5 配色方案:Catppuccin Mocha
Windows Terminal 自带几套配色(Campbell、One Half Dark、Solarized…),但都不如社区配色耐看。这里给一套完整可用的 Catppuccin Mocha。
在 settings.json 根层级找到或新增 "schemes": [ ... ],把下面这整段加进数组:
{
"name": "Catppuccin Mocha",
"background": "#1E1E2E",
"foreground": "#CDD6F4",
"cursorColor": "#F5E0DC",
"selectionBackground": "#585B70",
"black": "#45475A",
"red": "#F38BA8",
"green": "#A6E3A1",
"yellow": "#F9E2AF",
"blue": "#89B4FA",
"purple": "#F5C2E7",
"cyan": "#94E2D5",
"white": "#BAC2DE",
"brightBlack": "#585B70",
"brightRed": "#F38BA8",
"brightGreen": "#A6E3A1",
"brightYellow": "#F9E2AF",
"brightBlue": "#89B4FA",
"brightPurple": "#F5C2E7",
"brightCyan": "#94E2D5",
"brightWhite": "#A6ADC8"
}
然后确认 profiles.defaults.colorScheme 的值和 "name" 一模一样(包括空格)。
Windows Terminal 1.24 及以上还有独立的
"themes"数组,控制标签栏/标题栏颜色,和"schemes"不是一回事。两套都配好,视觉才统一。
如果保存后提示配色方案重名:说明你的 WT 版本已内置同名方案,直接删掉你粘贴的这段、在 UI 里选它即可;或者把两处
Catppuccin Mocha都改成Catppuccin Mocha Custom。
备选:Tokyo Night Storm(更偏蓝紫、对比更强)
{
"name": "Tokyo Night Storm",
"background": "#24283B",
"foreground": "#C0CAF5",
"cursorColor": "#C0CAF5",
"selectionBackground": "#364A82",
"black": "#1D202F",
"red": "#F7768E",
"green": "#9ECE6A",
"yellow": "#E0AF68",
"blue": "#7AA2F7",
"purple": "#BB9AF7",
"cyan": "#7DCFFF",
"white": "#A9B1D6",
"brightBlack": "#414868",
"brightRed": "#F7768E",
"brightGreen": "#9ECE6A",
"brightYellow": "#E0AF68",
"brightBlue": "#7AA2F7",
"brightPurple": "#BB9AF7",
"brightCyan": "#7DCFFF",
"brightWhite": "#C0CAF5"
}
3.6 背景图与毛玻璃(可选)
喜欢二次元壁纸/暗色纹理的,在 profiles.defaults 里加:
"backgroundImage": "C:\\Users\\<你的用户名>\\Pictures\\terminal-bg.jpg",
"backgroundImageOpacity": 0.22,
"backgroundImageStretchMode": "uniformToFill",
"backgroundImageAlignment": "center"
注意:
- 把
<你的用户名>换成自己的 Windows 用户名,或直接改成任意图片路径。 - 路径里的反斜杠必须写成两个反斜杠(JSON 转义)。
useAcrylic: true和背景图同时开,部分驱动下背景图会被盖掉——二选一。- 背景图透明度建议 0.15–0.3,太高会影响文字对比度。
3.7 启动与窗口
根层级(和 "profiles" 平级):
"launchMode": "maximized",
"startOnUserLogin": false,
"confirmCloseAllTabs": true
launchMode:default/maximized/fullscreen/focusconfirmCloseAllTabs:手滑关掉一堆标签页时的后悔药
3.8 快捷键小抄
| 快捷键 | 作用 |
|---|---|
Ctrl + Shift + T | 新建标签页 |
Ctrl + Shift + W | 关闭标签页 |
Alt + Shift + D | 复制当前 profile 并分屏(默认垂直) |
Alt + Shift + + / - | 左右分屏 / 上下分屏 |
Ctrl + Shift + P | 命令面板(搜索所有操作) |
Ctrl + Shift + F | 查找 |
Win + 反引号 | Quake 下拉终端(全局呼出) |
Ctrl + + / Ctrl + - | 字号缩放 |
分屏 + Quake 模式是效率提升最大的两个功能,建议练熟。
4. 第 2 步:Nerd Font 字体
4.1 为什么必须换字体
PowerShell 本身不需要特殊字体,但 Oh My Posh / Terminal-Icons / eza / Starship 会输出这些字符:
- Powerline 箭头:
U+E0B0、U+E0B2 - Git 分支:
U+E725 - 文件夹:
U+F07B - 各种语言 logo、电池、时钟图标(
U+F179等)
普通字体(微软雅黑、Consolas、Cascadia Code 原版)没有这些字形,就会显示成 □ 或 ?。
Nerd Font = 在等宽编程字体上 patch 了 3000+ 图标,一次解决。
4.2 字体怎么选
| 字体 | 中文 | 图标 | 连字 | 风格 | 适合 |
|---|---|---|---|---|---|
| Maple Mono NF CN | ✅ | ✅ | ✅ | 圆润、偏手写、有柔和斜体 | 中文用户首选,本文默认 |
| Sarasa Term SC Nerd Font(更纱黑体) | ✅✅ | ✅ | ❌ | 严谨、字面覆盖最全 | 中文为主、讨厌花哨 |
| Cascadia Code NF | ❌ | ✅ | ✅ | 微软官方、现代 | 全英文环境 |
| JetBrainsMono Nerd Font | ❌ | ✅ | ✅ | 硬朗、辨识度高 | 写代码 |
| MesloLGS NF | ❌ | ✅ | ❌ | p10k 标配 | 抄 macOS 配置 |
⚠️ 中文用户的关键坑:Cascadia Code / JetBrains Mono 不含中文。Windows Terminal 会逐字回退到微软雅黑,结果中文变成比例字体——宽度对不齐、行高跳动、表格错位。所以中文环境请优先选带 CJK 的 Maple Mono NF CN 或 Sarasa Term SC Nerd Font。
4.3 安装 Maple Mono NF CN(推荐,手动最稳)
- 打开 Release 页:github.com/subframe753…
- 在最新版本的 Assets 里下载
MapleMono-NF-CN.zipNF= Nerd Font(带图标)CN= 含中文- 不要选
Variable版本,静态版兼容性更好
- 解压,进入目录,全选所有
.ttf - 右键 → 安装(或「为所有用户安装」,需要管理员)
- Windows 11 的右键菜单要先点 「显示更多选项」 才能看到「安装」
- 完全关闭并重开 Windows Terminal(字体缓存要刷新)
4.4 用 scoop 安装(一条命令,适合已装 scoop)
没有 scoop 先装:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
Invoke-RestMethod get.scoop.sh | Invoke-Expression
然后:
scoop bucket add nerd-fonts
scoop install nerd-fonts/Maple-Mono-NF-CN
更纱黑体(包名以 scoop search 的结果为准):
scoop search sarasa # 先看包名
scoop install nerd-fonts/Sarasa-Term-SC-Nerd
scoop 的好处:升级、卸载都一条命令,不用手动删字体。
4.5 验证字体装好了没
# 注册表里应该能看到字体的完整名字
@(
(Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts').PSObject.Properties.Name
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts').PSObject.Properties.Name
) | Where-Object { $_ -match 'Maple|Nerd|Sarasa|Cascadia' } | Sort-Object -Unique
或者直接在终端里打印图标测试串:
"`u{e0b0} `u{e0b2} `u{f07b} `u{e725} `u{f1d3} `u{e70f}"
- 显示成一串彩色/单色图标 → 字体生效 ✅
- 显示成
□ □ □或?→ 字体没生效或选错名字 ❌
最后在 Windows Terminal → 设置 → 外观 → 字体 → 字体面 的下拉列表里确认能搜到 Maple Mono NF CN。
4.6 字号与清晰度
| 分辨率 | 建议字号 |
|---|---|
| 1920×1080 | 11 |
| 2560×1440 | 12 |
| 3840×2160 | 13–14(或 12 + 系统缩放 150%) |
配合 "antialiasingMode": "grayscale",细字重会更干净。
4.7 字体相关坑
| 现象 | 原因 | 解决 |
|---|---|---|
| WT 里搜不到字体 | 装完没重启终端 | 完全退出 WT 再开 |
| 选对了字体但图标仍是方块 | 装的是普通版不是 NF 版 | 重装 *NF* 包 |
| 字体名写错 | 实际叫 Maple Mono NF CN,不是 Maple Mono | 下拉列表里复制准确名字 |
| 中文宽度不齐 | 字体不含 CJK,回退了雅黑 | 换 Maple Mono NF CN / 更纱黑体 |
| 图标挤在一起 | 用了非等宽 Nerd Font | 换等宽版本 |
5. 第 3 步:Oh My Posh 提示符
5.1 它是什么
Oh My Posh 只做一件事:根据当前目录、Git 状态、上条命令耗时、语言版本等信息,渲染一行漂亮的提示符。 它不接管你的 Shell,也不改命令行为——所以可以随时删掉,零风险。
同类竞品:Starship(Rust 写的,更快更简单,配置是 TOML)。后面第 10 章会讲怎么选。
5.2 安装
# 推荐:winget
winget install --id JanDeDobbeleer.OhMyPosh -e --source winget --accept-package-agreements --accept-source-agreements
# 或者 scoop
scoop install oh-my-posh
装完新开一个终端验证:
oh-my-posh --version
5.3 MSIX 安装有个坑:主题不在 POSH_THEMES_PATH 里
网上大多数教程会让你用 $env:POSH_THEMES_PATH 拼主题路径。在部分 MSIX 安装方式下,这个变量可能是空的,照抄会得到 CONFIG NOT FOUND。
不同安装方式的主题目录:
| 安装方式 | 主题目录 |
|---|---|
| MSIX(较新的 winget 安装) | C:\Program Files\WindowsApps\ohmyposh.cli_<版本>_x64__<hash>\themes |
| 便携版 / 旧版 winget | %LOCALAPPDATA%\Programs\oh-my-posh\themes(= $env:POSH_THEMES_PATH) |
| winget 便携包 | %LOCALAPPDATA%\Microsoft\WinGet\Packages\JanDeDobbeleer.OhMyPosh_*\themes |
| scoop | %USERPROFILE%\scoop\apps\oh-my-posh\current\themes |
用下面这段自动定位(粘进终端执行一次即可):
function Get-OmpThemesDir {
# 旧版 / 便携版
if ($env:POSH_THEMES_PATH -and (Test-Path $env:POSH_THEMES_PATH)) {
return $env:POSH_THEMES_PATH
}
# MSIX 版
$pkg = $null
try { $pkg = Get-AppxPackage -Name ohmyposh.cli -ErrorAction Stop } catch { $pkg = $null }
if ($pkg) {
$p = Join-Path $pkg.InstallLocation 'themes'
if (Test-Path $p) { return $p }
}
# Get-AppxPackage 被策略拦住时,直接找安装目录
$pkgDir = $null
try {
$pkgDir = Get-ChildItem 'C:\Program Files\WindowsApps' -Directory -Filter 'ohmyposh.cli_*' -ErrorAction Stop |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
}
catch {
$pkgDir = $null
}
if ($pkgDir) {
$p = Join-Path $pkgDir.FullName 'themes'
if (Test-Path $p) { return $p }
}
# winget 便携包
$wingetPkg = Get-ChildItem (Join-Path $env:LOCALAPPDATA 'Microsoft\WinGet\Packages') -Directory -Filter 'JanDeDobbeleer.OhMyPosh*' -ErrorAction SilentlyContinue |
Select-Object -First 1
if ($wingetPkg) {
$p = Join-Path $wingetPkg.FullName 'themes'
if (Test-Path $p) { return $p }
}
# scoop
$scoop = Join-Path $HOME 'scoop\apps\oh-my-posh\current\themes'
if (Test-Path $scoop) { return $scoop }
return $null
}
$ompThemes = Get-OmpThemesDir
$ompThemes
Get-ChildItem $ompThemes -Filter *.omp.json |
ForEach-Object { $_.Name -replace '\.omp\.json$', '' }
最后一行会列出一百多个主题名(catppuccin_mocha、tokyonight_storm、atomic…)。
如果
Get-OmpThemesDir返回空:在普通(非管理员也可以) PowerShell 里跑Get-AppxPackage ohmyposh.cli | Select-Object InstallLocation,把输出路径手动拼上\themes。
5.4 第一步:把全部主题复制到自己的目录
不要直接引用安装目录——MSIX 升级后路径里的版本号会变,下次启动就找不到主题了。把主题全部复制出来,保持原文件名:
$configDir = "$HOME\.config\oh-my-posh"
New-Item -ItemType Directory -Path $configDir -Force | Out-Null
Copy-Item "$ompThemes\*.omp.json" -Destination $configDir -Force
(Get-ChildItem $configDir -Filter *.omp.json).Count
这样每个主题都保留原名,后面可以按名字切换,不用反复覆盖同一个文件。升级 Oh My Posh 也不会影响这份副本。
重新执行这一步会用安装目录里的版本覆盖同名主题;如果你已经改过某个主题,先备份,或者只复制需要的文件。
只想留几个主题也可以,把需要的
.omp.json复制进去即可;下面按“全部复制”的方式讲。
5.5 初始化
先写入当前主题名:
Set-Content "$HOME\.config\oh-my-posh\active-theme.txt" 'catppuccin_mocha' -Encoding utf8
然后在 $PROFILE 里写:
$ompThemeDir = "$HOME\.config\oh-my-posh"
$ompThemeState = Join-Path $ompThemeDir 'active-theme.txt'
$ompThemeName = if (Test-Path $ompThemeState) {
(Get-Content $ompThemeState -Raw).Trim()
}
else {
'catppuccin_mocha'
}
$ompTheme = Join-Path $ompThemeDir "$ompThemeName.omp.json"
if (-not (Test-Path $ompTheme)) {
$ompTheme = Join-Path $ompThemeDir 'catppuccin_mocha.omp.json'
}
if ((Get-Command oh-my-posh -ErrorAction SilentlyContinue) -and (Test-Path $ompTheme)) {
oh-my-posh init pwsh --config $ompTheme | Invoke-Expression
}
保存后执行 . $PROFILE,提示符立刻变样。以后每次开新标签页,profile 都会读取 active-theme.txt,自动加载当前主题。
还没复制主题、只想先看默认效果的话:
oh-my-posh init pwsh | Invoke-Expression
如果报
oh-my-posh 不是内部或外部命令:PATH 没刷新。关掉所有终端重开;仍不行就手动补:$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
5.6 挑一个主题
较新版本的 init 脚本里可能不再提供 Get-PoshThemes;如果你的版本还有这个命令,也可以直接用。先列出所有主题:
Get-ChildItem "$HOME\.config\oh-my-posh" -Filter *.omp.json |
ForEach-Object { $_.Name -replace '\.omp\.json$', '' }
想单个预览(不切换):
function Show-OmpTheme {
param([Parameter(Mandatory)][string]$Name)
$dir = Get-OmpThemesDir
if (-not $dir) {
"先执行 5.3 节的 Get-OmpThemesDir,确认能找到主题目录"
return
}
$file = Join-Path $dir "$Name.omp.json"
if (Test-Path $file) {
oh-my-posh print primary --config $file
}
else {
"没有这个主题:$Name"
}
}
Show-OmpTheme catppuccin_mocha
Show-OmpTheme tokyonight_storm
几个口碑不错的(主题名就是文件名去掉 .omp.json):
| 主题 | 风格 |
|---|---|
jandedobbeleer | 默认款,信息全、平衡 |
catppuccin_mocha | 和本文配色完美配套,柔和 |
tokyonight_storm | 蓝紫霓虹,科技感 |
atomic | 简洁两段式,速度快 |
clean-detailed | 极简,只有路径和 Git |
powerlevel10k_rainbow | 仿 p10k,花哨 |
montys | 彩色块状,辨识度高 |
切换主题用 poshtheme。把下面两个函数放进 $PROFILE(第 8 章模板已包含):
function poshthemes {
$dir = "$HOME\.config\oh-my-posh"
$state = Join-Path $dir 'active-theme.txt'
$active = if (Test-Path $state) { (Get-Content $state -Raw).Trim() } else { '' }
Get-ChildItem $dir -Filter *.omp.json |
ForEach-Object {
$name = $_.Name -replace '\.omp\.json$', ''
[pscustomobject]@{
Active = if ($name -eq $active) { '*' } else { '' }
Name = $name
}
} |
Sort-Object Name
}
function poshtheme {
param([Parameter(Position = 0)][string]$Name)
$dir = "$HOME\.config\oh-my-posh"
$state = Join-Path $dir 'active-theme.txt'
if (-not $Name) {
$current = if (Test-Path $state) { (Get-Content $state -Raw).Trim() } else { '(未设置)' }
"当前主题:$current"
"用法:poshtheme <主题名>"
"查看全部:poshthemes"
return
}
$file = Join-Path $dir "$Name.omp.json"
if (-not (Test-Path $file)) {
Write-Warning "没有这个主题:$Name"
return
}
Set-Content -Path $state -Value $Name -Encoding utf8
Remove-Module oh-my-posh-core -Force -ErrorAction SilentlyContinue
$global:_ompInitialized = $false
oh-my-posh init pwsh --config $file | Invoke-Expression
Write-Host "已切换主题:$Name" -ForegroundColor Green
}
用法:
poshthemes # 列出全部,* 是当前
poshtheme tokyonight_storm # 切换
poshtheme catppuccin_mocha # 切回
poshtheme # 当前主题
poshtheme 会把名字写进 active-theme.txt,并重新初始化当前会话;新标签页也会读取这个文件。
如果切换后提示符没变:
. $PROFILE或重开标签页。个别 OMP 版本的模块名不同,自动重载可能失效,但主题名已经写入,重开一定生效。
5.7 自定义主题
主题按原名放在 $HOME\.config\oh-my-posh 目录下。改当前主题:
$name = (Get-Content "$HOME\.config\oh-my-posh\active-theme.txt" -Raw).Trim()
code "$HOME\.config\oh-my-posh\$name.omp.json" # 没有 VS Code 就用 notepad
也可以直接改任意一个文件,例如:
code "$HOME\.config\oh-my-posh\catppuccin_mocha.omp.json"
一个最小可用的主题长这样(较新的 v4 写法):
{
"version": 4,
"final_space": true,
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{
"type": "path",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"foreground": "#1e1e2e",
"background": "#89b4fa",
"options": { "style": "folder", "max_depth": 3 }
},
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"foreground": "#1e1e2e",
"background": "#a6e3a1",
"options": { "branch_icon": "\ue725 " }
},
{
"type": "executiontime",
"style": "plain",
"foreground": "#6c7086",
"template": " {{ .FormattedMs }}"
},
{
"type": "text",
"style": "plain",
"foreground": "#89b4fa",
"template": "\u276f"
}
]
}
]
}
blocks:一行提示符(可以有多行、左右对齐)segments:一个个信息块(路径、Git、Node、Python、耗时…)template:Go template 语法,控制显示内容style:plain/powerline/diamondforeground/background:颜色,支持#RRGGBB、transparent、p:调色板名options:segment 的专属设置(旧版叫properties,较新版本仍兼容旧写法)
版本差异:老主题是 "version": 3 + "properties";较新版本默认导出的是 "version": 4 + "options"。两种都能加载,新写配置建议用 v4。
常用 options:
{
"style": "folder",
"max_depth": 3,
"fetch_status": false,
"branch_max_length": 25,
"display_mode": "directory"
}
style: folder只显示文件夹名(不显示完整路径)max_depth限制层级fetch_status: false不查 Git 工作区状态,明显更快display_mode:directory/compact/files
想让配色好维护,可以在主题顶部加 palette,然后颜色写 p:blue:
"palette": {
"blue": "#89B4FA",
"green": "#A6E3A1",
"text": "#CDD6F4"
}
改完保存,poshtheme <主题名> 或重开一个标签页就能看到效果。
5.8 升级与卸载
winget upgrade --id JanDeDobbeleer.OhMyPosh -e
winget uninstall --id JanDeDobbeleer.OhMyPosh -e
5.9 性能
Oh My Posh 每个提示符都会执行一次,Git 仓库大时可能卡顿(100ms+ 就能感觉到)。
oh-my-posh debug
会打印每个 segment 的耗时。优化手段:
- 关掉
fetch_status(最有效) - 少放几个语言版本 segment
- 大仓库里用
clean-detailed这类轻量主题 - 还是慢 → 换 Starship
6. 第 4 步:PSReadLine 补全与预测
PSReadLine 是 PowerShell 的「行编辑器」,负责语法高亮、历史、补全、预测。PowerShell 7 自带,一般不需要单独安装。
6.1 必开配置
写进 profile:
Set-PSReadLineOption -EditMode Windows
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineOption -HistoryNoDuplicates
Set-PSReadLineOption -MaximumHistoryCount 20000
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
如果
PredictionViewStyle ListView那一行报错,说明 PSReadLine 版本较旧;删掉这一行即可,其他配置不受影响。
效果:
- 输入命令时,灰色文字根据历史实时预测,按
→接受 - 下方弹出列表视图,
↑/↓选择 Tab变成菜单式补全(而不是循环切换)↑/↓按前缀搜索历史,而不是逐条翻
6.2 可选:语法高亮配色
默认配色在深色背景上也能看,但想和 Catppuccin 统一可以加这段(不生效就删掉,不影响其他功能):
Set-PSReadLineOption -Colors @{
Command = "`e[38;2;137;180;250m"
Parameter = "`e[38;2;249;226;175m"
Operator = "`e[38;2;148;226;213m"
Variable = "`e[38;2;245;194;231m"
String = "`e[38;2;166;227;161m"
Number = "`e[38;2;250;179;135m"
Type = "`e[38;2;249;226;175m"
Comment = "`e[38;2;108;112;134m"
Keyword = "`e[38;2;203;166;247m"
Error = "`e[38;2;243;139;168m"
InlinePrediction = "`e[38;2;108;112;134m"
}
6.3 插件预测(更准)
默认只预测历史。装 CompletionPredictor 后,能从模块的补全结果里预测参数:
Install-Module CompletionPredictor -Scope CurrentUser -Force
profile 里:
Import-Module CompletionPredictor -ErrorAction SilentlyContinue
PredictionSource 里的 Plugin 就会自动启用。
6.4 键位表
| 按键 | 作用 |
|---|---|
→ / End | 接受行内预测 |
Tab | 打开补全菜单 / 在菜单中下一个 |
Shift + Tab | 补全菜单上一个 |
↑ / ↓ | 前缀历史搜索 |
Ctrl + R | 反向搜索历史(装 PSFzf 后变模糊搜索) |
Ctrl + L | 清屏(保留当前输入) |
Ctrl + C | 取消当前行 |
F2 | 切换预测视图(需手动绑定) |
想给 F2 绑定视图切换:
Set-PSReadLineKeyHandler -Key F2 -Function SwitchPredictionView
7. 第 5 步:效率工具全家桶
这些不是「好看」,但装完你的终端才算真正好用。全部可选,按需装。
| 工具 | 替代/增强 | 作用 | winget ID |
|---|---|---|---|
| Terminal-Icons | ls | 文件和文件夹显示图标 | PSGallery 模块 |
| zoxide | cd | 智能跳转,z proj 直达常用目录 | ajeetdsouza.zoxide |
| fzf | Ctrl+R | 模糊搜索历史/文件 | junegunn.fzf |
| PSFzf | — | fzf 与 PSReadLine 集成 | PSGallery 模块 |
| posh-git | — | Git 分支/命令 Tab 补全 | PSGallery 模块 |
| ConsoleGuiTools | — | Out-ConsoleGridView 交互式表格选择 | PSGallery 模块 |
| PSScriptAnalyzer | — | PowerShell 脚本静态检查 | PSGallery 模块 |
| bat | cat | 语法高亮 + 行号 | sharkdp.bat |
| eza | ls | 彩色、图标、Git 状态、树形 | eza-community.eza |
| ripgrep | grep | 快得多的递归搜索 | BurntSushi.ripgrep.MSVC |
| fd | find | 更友好的文件查找 | sharkdp.fd |
| delta | git diff | 并排 diff、语法高亮 | dandavison.delta |
| fastfetch | systeminfo | 启动时显示系统信息 | Fastfetch-cli.Fastfetch |
| gsudo | — | 类似 Linux 的 sudo | gerardog.gsudo |
7.1 一次性安装
$apps = @(
'ajeetdsouza.zoxide',
'junegunn.fzf',
'sharkdp.bat',
'eza-community.eza',
'BurntSushi.ripgrep.MSVC',
'sharkdp.fd',
'dandavison.delta',
'Fastfetch-cli.Fastfetch',
'gerardog.gsudo'
)
foreach ($id in $apps) {
winget install --id $id -e --source winget --accept-package-agreements --accept-source-agreements
}
PowerShell 模块:
Install-Module Terminal-Icons, PSFzf, CompletionPredictor, posh-git, Microsoft.PowerShell.ConsoleGuiTools, PSScriptAnalyzer -Scope CurrentUser -Force -AllowClobber
首次
Install-Module可能提示安装 NuGet 提供程序,输Y即可。 若报「不受信任的存储库」,先执行Set-PSRepository PSGallery -InstallationPolicy Trusted,或在提示时输Y。
7.2 各工具怎么用
Terminal-Icons:装完 import 一下,ls 自动带图标:
Import-Module Terminal-Icons
zoxide:记住你去过的目录,按频率跳转:
zoxide init powershell | Out-String | Invoke-Expression # 写进 profile
z proj # 跳到任何名字含 proj 的常用目录
z - # 回上一个目录
zi # 交互式选择
进阶:zoxide init powershell --cmd cd 可以让 cd 本身支持模糊跳转。
fzf + PSFzf:
Ctrl + R # 模糊搜索命令历史
Ctrl + T # 模糊选择当前目录下的文件,插入命令行
posh-git:给 git checkout、git branch 等命令加 Tab 补全(分支名、远程名),不接管提示符。
git checkout feat<Tab> # 补全分支名
ConsoleGuiTools:Get-Process | Out-ConsoleGridView,在表格里筛选、排序、多选对象。
PSScriptAnalyzer:Invoke-ScriptAnalyzer -Path .\script.ps1,检查脚本里的常见问题。
bat:
bat README.md
bat --list-themes # 看可用主题
想默认用 bat 代替 cat:Set-Alias -Name cat -Value bat -Force(bat 检测到管道时会自动退化成纯文本,不会污染脚本)。
eza:
eza -la --group-directories-first --icons
eza --tree --level=2 --icons
ripgrep / fd:
rg "TODO" -n
fd "\.ps1$"
delta:配置到 ~/.gitconfig:
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
line-numbers = true
side-by-side = false
syntax-theme = Catppuccin Mocha
[merge]
conflictstyle = zdiff3
如果
syntax-theme报错,执行bat --list-themes换个存在的名字,比如Monokai Extended。如果
git diff看起来没走 delta:运行git var GIT_PAGER,应为delta。若输出cat,说明环境变量GIT_PAGER覆盖了core.pager,执行Remove-Item Env:GIT_PAGER或在 profile 里清掉。Git 只在交互式终端启用 pager,重定向输出不会走 delta。
fastfetch:
fastfetch
fastfetch --gen-config # 生成配置文件,路径见输出
配置文件在 ~\.config\fastfetch\config.jsonc(fastfetch --gen-config 会打印实际路径)。
这套配色基于 Tokyo Night 的蓝/紫/青;想换颜色,改
display.color和logo.color即可。
gsudo:
gsudo Get-Service # 单条命令提权,弹 UAC
sudo ... # Windows 11 24H2+ 自带 sudo,可在 设置 → 系统 → 开发者选项 开启
8. 第 6 步:完整 profile 模板
把下面整段复制进 $PROFILE(先 New-Item -ItemType File -Path $PROFILE -Force,再 code $PROFILE 或 notepad $PROFILE)。
已经写好了存在性判断:没装的工具会自动跳过,不会报错。
这是最小可用版。如果你需要 Git 快捷命令、系统工具函数、主题切换等,可以在这个模板基础上继续扩展。
# ============================================================
# PowerShell 7 终端美化配置
# 位置:%USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
# 改完执行:. $PROFILE 或重开标签页
# ============================================================
# ---------- 0. UTF-8(解决中文乱码) ----------
$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
# ---------- 1. PSReadLine:预测、历史、补全 ----------
if (Get-Module -ListAvailable -Name PSReadLine) {
try {
Set-PSReadLineOption -EditMode Windows
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineOption -HistoryNoDuplicates
Set-PSReadLineOption -MaximumHistoryCount 20000
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
}
catch {
# 少数不支持虚拟终端的宿主会在这里报错,跳过即可
}
}
# ---------- 2. 模块 ----------
Import-Module Terminal-Icons -ErrorAction SilentlyContinue
Import-Module CompletionPredictor -ErrorAction SilentlyContinue
# posh-git:Git 分支/命令的 Tab 补全(不接管提示符)
Import-Module posh-git -ErrorAction SilentlyContinue
if ((Get-Module -ListAvailable -Name PSFzf) -and (Get-Command fzf -ErrorAction SilentlyContinue)) {
Import-Module PSFzf
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'
}
# ---------- 3. zoxide ----------
if (Get-Command zoxide -ErrorAction SilentlyContinue) {
zoxide init powershell | Out-String | Invoke-Expression
}
# ---------- 4. 别名与小函数 ----------
function ll {
Get-ChildItem -Force @args
}
function la {
Get-ChildItem -Force @args
}
function .. {
Set-Location ..
}
function ... {
Set-Location ../..
}
function mkcd {
param(
[Parameter(Mandatory)]
[string]$Path
)
New-Item -ItemType Directory -Force -Path $Path | Out-Null
Set-Location $Path
}
function reload {
. $PROFILE
}
function myprofile {
if (Get-Command code -ErrorAction SilentlyContinue) {
code $PROFILE
}
else {
notepad $PROFILE
}
}
# eza 存在时,用 eza 重写 ll / lt
if (Get-Command eza -ErrorAction SilentlyContinue) {
function ll {
eza --long --all --group-directories-first --icons @args
}
function lt {
eza --tree --level=2 --icons @args
}
}
# bat 存在时,cat 走 bat
if (Get-Command bat -ErrorAction SilentlyContinue) {
$env:BAT_THEME = 'Catppuccin Mocha'
Set-Alias -Name cat -Value bat -Force
}
# ---------- 5. 主题切换 ----------
function poshthemes {
$dir = "$HOME\.config\oh-my-posh"
$state = Join-Path $dir 'active-theme.txt'
$active = if (Test-Path $state) { (Get-Content $state -Raw).Trim() } else { '' }
Get-ChildItem $dir -Filter *.omp.json |
ForEach-Object {
$name = $_.Name -replace '\.omp\.json$', ''
[pscustomobject]@{
Active = if ($name -eq $active) { '*' } else { '' }
Name = $name
}
} |
Sort-Object Name
}
function poshtheme {
param([Parameter(Position = 0)][string]$Name)
$dir = "$HOME\.config\oh-my-posh"
$state = Join-Path $dir 'active-theme.txt'
if (-not $Name) {
$current = if (Test-Path $state) { (Get-Content $state -Raw).Trim() } else { '(未设置)' }
"当前主题:$current"
"用法:poshtheme <主题名>"
"查看全部:poshthemes"
return
}
$file = Join-Path $dir "$Name.omp.json"
if (-not (Test-Path $file)) {
Write-Warning "没有这个主题:$Name"
return
}
Set-Content -Path $state -Value $Name -Encoding utf8
Remove-Module oh-my-posh-core -Force -ErrorAction SilentlyContinue
$global:_ompInitialized = $false
oh-my-posh init pwsh --config $file | Invoke-Expression
Write-Host "已切换主题:$Name" -ForegroundColor Green
}
# ---------- 6. Oh My Posh(放最后,覆盖提示符) ----------
if (Get-Command oh-my-posh -ErrorAction SilentlyContinue) {
$ompThemeDir = "$HOME\.config\oh-my-posh"
$ompThemeState = Join-Path $ompThemeDir 'active-theme.txt'
$ompThemeName = if (Test-Path $ompThemeState) { (Get-Content $ompThemeState -Raw).Trim() } else { 'catppuccin_mocha' }
$ompTheme = Join-Path $ompThemeDir "$ompThemeName.omp.json"
if (-not (Test-Path $ompTheme)) {
$ompTheme = Join-Path $ompThemeDir 'catppuccin_mocha.omp.json'
}
try {
if (Test-Path $ompTheme) {
oh-my-posh init pwsh --config $ompTheme | Invoke-Expression
}
else {
# 还没复制主题时,退回 Oh My Posh 默认配置
oh-my-posh init pwsh | Invoke-Expression
}
}
catch {
# 提示符加载失败不应影响 Shell 启动
}
}
8.1 保存并生效
. $PROFILE
或者用模板里的快捷函数(新会话生效后):reload。
如果报错,先看错误信息定位到哪一行;临时跳过 profile 启动用:
pwsh -NoProfile
8.2 如果你用 VS Code
VS Code 的集成终端默认是 Windows PowerShell 5.1,且字体是独立设置的。在 settings.json 里加:
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.fontFamily": "Maple Mono NF CN",
"terminal.integrated.fontSize": 13
9. 第 7 步:统一配色
视觉统一的关键是:终端背景色、Oh My Posh 主题、bat 主题、delta 主题、PSReadLine 高亮用同一套色板。
Catppuccin Mocha 全家桶:
| 组件 | 设置 |
|---|---|
| Windows Terminal | colorScheme: "Catppuccin Mocha" 或 "Tokyo Night Storm"(3.5 节) |
| Windows Terminal UI | 根级 "theme" 选同名 UI 主题,控制标签栏/标题栏 |
| Oh My Posh | poshtheme catppuccin_mocha / poshtheme tokyonight_storm |
| bat | $env:BAT_THEME = 'Catppuccin Mocha' |
| delta | syntax-theme = Catppuccin Mocha |
| PSReadLine | 6.2 节的 RGB 配色 |
Tokyo Night 用户:WT 选 Tokyo Night Storm,OMP 用 poshtheme tokyonight_storm;bat / delta 没有对应主题时保留 Catppuccin 或 OneHalfDark。
bat / delta 的主题名必须真实存在,用
bat --list-themes查。找不到 Catppuccin 说明 bat 版本旧,winget upgrade sharkdp.bat即可。
10. 进阶玩法
10.1 Oh My Posh vs Starship 怎么选
| Oh My Posh | Starship | |
|---|---|---|
| 配置格式 | JSON | TOML |
| 主题数量 | 100+ 现成 | 少而精,自己拼 |
| 速度 | 中等 | 更快 |
| 上手 | 装完即用 | 需要写配置 |
| 跨 Shell | 全平台 | 全平台 |
建议:想要「装完就好看」用 Oh My Posh;追求极简和速度用 Starship。
Starship 安装:
winget install --id Starship.Starship -e
profile:
Invoke-Expression (&starship init powershell)
配置:$HOME\.config\starship.toml,官方预设见 starship.rs/presets/。
两者不要同时初始化,否则提示符会打架。
10.2 给 Git 加颜色和图标
Oh My Posh 的 git segment 自动读取仓库状态,不需要额外配置。想更细可以加:
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"foreground": "#1e1e2e",
"background": "#a6e3a1",
"options": {
"branch_icon": "\ue725 ",
"fetch_status": true,
"fetch_upstream_icon": true
}
}
fetch_status: true 会显示 +3 ~2 -1(新增/修改/删除),但大仓库会变慢。
10.3 SSH 到 Linux 也想要同款
Oh My Posh 支持远程;更简单的做法是在远端装 Starship,本地终端只负责渲染。字体图标是本地渲染的,所以本地装了 Nerd Font 就够。
10.4 中文对齐:别指望字体回退
Windows Terminal 的字体回退(fallback)是自动的:当前字体没有某个字形时,系统临时找别的字体补上。它没有可靠的配置项,也控制不了宽度。
结果就是:用 Cascadia Code 显示中文时,汉字会回退到微软雅黑——比例字体,和英文的等宽格栅对不齐,表格、eza 的列、进度条全都会歪。
唯一靠谱的解法是选一个自带中文的等宽字体(Maple Mono NF CN、Sarasa Term SC Nerd Font),而不是配 fallback。
10.5 使用 Windows Terminal 预览版
想第一时间体验新特性(命令面板增强、新渲染器):
winget install --id Microsoft.WindowsTerminal.Preview -e
预览版和稳定版可以共存,配置独立。
11. 排错手册
11.1 满屏方块 / 问号
原因:字体没装、没选对、或名字写错。 排查:
"`u{e0b0} `u{e725} `u{f07b}"
仍是方块 → 装 Nerd Font;图标正常但 OMP 里个别图标是方块 → 该主题用了字体里没有的私有区字符,换个主题。
11.2 中文乱码 / 宽度不齐
- 终端里执行
chcp,显示65001最好;如果是936,执行chcp 65001,或在 profile 里加上 UTF-8 那行。 - PowerShell 7 默认 UTF-8;从 5.1 或 cmd 启动的旧会话可能不是。
- 宽度不齐 = 字体不含 CJK,换 Maple Mono NF CN。
11.3 提示符没变
按顺序查:
- 当前是不是 PowerShell 7?
$PSVersionTable.PSVersion - profile 路径对不对?
$PROFILE,文件是否存在? - profile 里有报错吗?
pwsh -NoProfile能启动,说明是 profile 的问题。 - OMP 初始化那行是否在 profile 最后?被后面的代码覆盖了?
- 改完执行
. $PROFILE了吗?
11.4 「无法加载文件,因为在此系统上禁止运行脚本」
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
11.5 oh-my-posh 命令找不到
PATH 没刷新。关掉所有终端重开;或临时补 PATH:
$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
11.6 启动明显变慢
oh-my-posh debug
看哪个 segment 耗时。最常见是 Git 的 fetch_status。想对比的话,用 pwsh -NoProfile 启动一个不加载 profile 的会话即可。
11.7 winget 报错
winget source reset --force
winget source update
仍不行就去 Microsoft Store 更新「应用安装程序」。
11.8 设置保存后终端打不开 / 闪退
settings.json JSON 语法错了。恢复备份:
$wt = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
Copy-Item "$wt.bak" $wt -Force
常见语法错误:多了一个逗号、少了一个引号、路径没转义(反斜杠要写两个)。
11.9 VS Code 终端里图标是方块
VS Code 的终端字体要在 terminal.integrated.fontFamily 单独设置,不跟随 Windows Terminal。
11.10 装了 Oh My Posh 但 Git 图标不显示
- 字体不是 NF 版
- 当前目录不是 Git 仓库
- 主题里 git segment 被禁用
12. 回滚与卸载
12.1 只回滚配置
# profile 整个备份/清空
Copy-Item $PROFILE "$PROFILE.bak" -Force
Set-Content $PROFILE -Value '' -Encoding utf8
# Windows Terminal
$wt = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
Copy-Item "$wt.bak" $wt -Force
12.2 卸载软件
$ids = @(
'JanDeDobbeleer.OhMyPosh','ajeetdsouza.zoxide','junegunn.fzf','sharkdp.bat',
'eza-community.eza','BurntSushi.ripgrep.MSVC','sharkdp.fd','dandavison.delta',
'Fastfetch-cli.Fastfetch','gerardog.gsudo'
)
foreach ($id in $ids) { winget uninstall --id $id -e }
模块:
Uninstall-Module Terminal-Icons, PSFzf, CompletionPredictor, posh-git, Microsoft.PowerShell.ConsoleGuiTools, PSScriptAnalyzer -AllVersions -Force
12.3 删除字体
设置 → 个性化 → 字体 → 搜索字体名 → 卸载(仅对当前用户安装的字体有效)。
或手动删注册表项 + 文件:
# 先确认要删什么!
Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts' |
Select-Object -Property *Maple* | Format-List
删字体有风险,建议用设置界面。
附录 A:把配置固化成脚本(可选)
如果经常给新机器配环境,可以把本文步骤写成一个 PowerShell 脚本。建议按这个顺序:
- 检查
winget、PowerShell 7、Windows Terminal - 用 winget 安装 Oh My Posh、Git、常用工具
- 安装 PowerShell 模块
- 安装 Nerd Font:下载字体包,或调用
oh-my-posh font install - 把 OMP 主题复制到
~\.config\oh-my-posh - 写入 profile(用标记块,便于以后替换)
- 合并 Windows Terminal 的
settings.json(先备份) - 写入
~\.gitconfig
几个关键点:
- 每一步先判断是否已安装,保证脚本可以重复执行
- 改
settings.json前先备份;用ConvertFrom-Json -AsHashtable合并,而不是整文件覆盖 - profile 用
# >>> ... >>>和# <<< ... <<<标记包起来,脚本只替换标记之间的内容 - 字体装到当前用户(
%LOCALAPPDATA%\Microsoft\Windows\Fonts+ HKCU 注册表),不需要管理员
这样即使某一步失败,也可以回滚后重新运行。
附录 B:命令速查表
# 重新加载配置
. $PROFILE
# 列出主题 / 切换主题
poshthemes
poshtheme tokyonight_storm
# 预览当前主题
$name = (Get-Content "$HOME\.config\oh-my-posh\active-theme.txt" -Raw).Trim()
oh-my-posh print primary --config "$HOME\.config\oh-my-posh\$name.omp.json"
# 当前 profile 路径
$PROFILE
# 验证字体
"`u{e0b0} `u{e725} `u{f07b}"
# 测 OMP 性能
oh-my-posh debug
# 更新所有软件
winget upgrade --all --include-unknown
# 打开 WT 设置 JSON
code "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
最后一句话
终端美化的终点不是「装了多少插件」,而是你打开终端时心情好、敲命令时手不累。
如果某天觉得花哨了,把 profile 清空、执行 poshtheme clean-detailed,随时可以重新开始——所有配置都是纯文本,删了就没了,坏不了系统。
希望这篇教程能帮你搭出一套顺手的终端。