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. 先搞清楚:你到底在美化什么](#0. 先搞清楚:你到底在美化什么 "#0-%E5%85%88%E6%90%9E%E6%B8%85%E6%A5%9A%E4%BD%A0%E5%88%B0%E5%BA%95%E5%9C%A8%E7%BE%8E%E5%8C%96%E4%BB%80%E4%B9%88")
- [1. 环境自检](#1. 环境自检 "#1-%E7%8E%AF%E5%A2%83%E8%87%AA%E6%A3%80")
- [2. 10 分钟速通(懒人版)](#2. 10 分钟速通(懒人版) "#2-10-%E5%88%86%E9%92%9F%E9%80%9F%E9%80%9A%E6%87%92%E4%BA%BA%E7%89%88")
- [3. 第 1 步:Windows Terminal 配置](#3. 第 1 步:Windows Terminal 配置 "#3-%E7%AC%AC-1-%E6%AD%A5windows-terminal-%E9%85%8D%E7%BD%AE")
- [4. 第 2 步:Nerd Font 字体](#4. 第 2 步:Nerd Font 字体 "#4-%E7%AC%AC-2-%E6%AD%A5nerd-font-%E5%AD%97%E4%BD%93")
- [5. 第 3 步:Oh My Posh 提示符](#5. 第 3 步:Oh My Posh 提示符 "#5-%E7%AC%AC-3-%E6%AD%A5oh-my-posh-%E6%8F%90%E7%A4%BA%E7%AC%A6")
- [6. 第 4 步:PSReadLine 补全与预测](#6. 第 4 步:PSReadLine 补全与预测 "#6-%E7%AC%AC-4-%E6%AD%A5psreadline-%E8%A1%A5%E5%85%A8%E4%B8%8E%E9%A2%84%E6%B5%8B")
- [7. 第 5 步:效率工具全家桶](#7. 第 5 步:效率工具全家桶 "#7-%E7%AC%AC-5-%E6%AD%A5%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7%E5%85%A8%E5%AE%B6%E6%A1%B6")
- [8. 第 6 步:完整 profile 模板](#8. 第 6 步:完整 profile 模板 "#8-%E7%AC%AC-6-%E6%AD%A5%E5%AE%8C%E6%95%B4-profile-%E6%A8%A1%E6%9D%BF")
- [9. 第 7 步:统一配色](#9. 第 7 步:统一配色 "#9-%E7%AC%AC-7-%E6%AD%A5%E7%BB%9F%E4%B8%80%E9%85%8D%E8%89%B2")
- [10. 进阶玩法](#10. 进阶玩法 "#10-%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95")
- [11. 排错手册](#11. 排错手册 "#11-%E6%8E%92%E9%94%99%E6%89%8B%E5%86%8C")
- [12. 回滚与卸载](#12. 回滚与卸载 "#12-%E5%9B%9E%E6%BB%9A%E4%B8%8E%E5%8D%B8%E8%BD%BD")
- [附录 A:把配置固化成脚本(可选)](#附录 A:把配置固化成脚本(可选) "#%E9%99%84%E5%BD%95-a%E6%8A%8A%E9%85%8D%E7%BD%AE%E5%9B%BA%E5%8C%96%E6%88%90%E8%84%9A%E6%9C%AC%E5%8F%AF%E9%80%89")
- [附录 B:命令速查表](#附录 B:命令速查表 "#%E9%99%84%E5%BD%95-b%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5%E8%A1%A8")
0. 先搞清楚:你到底在美化什么
很多人一上来就抄一堆配置,结果不知道哪一层出了问题。终端美化其实只有四层:
text
┌─────────────────────────────────────────────────────┐
│ 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):
powershell
# 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 步走,细节后面章节再补:
powershell
# ① 装 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 文件。文件通常在:
text
# Store 版(绝大多数人)
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
# 非 Store 版(winget / scoop / 便携版)
%LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json
备份(强烈建议,改坏了能秒回滚):
powershell
$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 就手动加一个,然后把下面这些键合并进去(已有同名键就改值,别重复写):
json
"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": [ ... ],把下面这整段加进数组:
json
{
"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(更偏蓝紫、对比更强)
json
{
"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 里加:
json
"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" 平级):
json
"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 先装:
powershell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
Invoke-RestMethod get.scoop.sh | Invoke-Expression
然后:
powershell
scoop bucket add nerd-fonts
scoop install nerd-fonts/Maple-Mono-NF-CN
更纱黑体(包名以 scoop search 的结果为准):
powershell
scoop search sarasa # 先看包名
scoop install nerd-fonts/Sarasa-Term-SC-Nerd
scoop 的好处:升级、卸载都一条命令,不用手动删字体。
4.5 验证字体装好了没
powershell
# 注册表里应该能看到字体的完整名字
@(
(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
或者直接在终端里打印图标测试串:
powershell
"`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 安装
powershell
# 推荐:winget
winget install --id JanDeDobbeleer.OhMyPosh -e --source winget --accept-package-agreements --accept-source-agreements
# 或者 scoop
scoop install oh-my-posh
装完新开一个终端验证:
powershell
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 |
用下面这段自动定位(粘进终端执行一次即可):
powershell
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 升级后路径里的版本号会变,下次启动就找不到主题了。把主题全部复制出来,保持原文件名:
powershell
$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 初始化
先写入当前主题名:
powershell
Set-Content "$HOME\.config\oh-my-posh\active-theme.txt" 'catppuccin_mocha' -Encoding utf8
然后在 $PROFILE 里写:
powershell
$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,自动加载当前主题。
还没复制主题、只想先看默认效果的话:
powershell
oh-my-posh init pwsh | Invoke-Expression
如果报
oh-my-posh 不是内部或外部命令:PATH 没刷新。关掉所有终端重开;仍不行就手动补:
powershell$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
5.6 挑一个主题
较新版本的 init 脚本里可能不再提供 Get-PoshThemes;如果你的版本还有这个命令,也可以直接用。先列出所有主题:
powershell
Get-ChildItem "$HOME\.config\oh-my-posh" -Filter *.omp.json |
ForEach-Object { $_.Name -replace '\.omp\.json$', '' }
想单个预览(不切换):
powershell
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 章模板已包含):
powershell
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
}
用法:
powershell
poshthemes # 列出全部,* 是当前
poshtheme tokyonight_storm # 切换
poshtheme catppuccin_mocha # 切回
poshtheme # 当前主题
poshtheme 会把名字写进 active-theme.txt,并重新初始化当前会话;新标签页也会读取这个文件。
如果切换后提示符没变:
. $PROFILE或重开标签页。个别 OMP 版本的模块名不同,自动重载可能失效,但主题名已经写入,重开一定生效。
5.7 自定义主题
主题按原名放在 $HOME\.config\oh-my-posh 目录下。改当前主题:
powershell
$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
也可以直接改任意一个文件,例如:
powershell
code "$HOME\.config\oh-my-posh\catppuccin_mocha.omp.json"
一个最小可用的主题长这样(较新的 v4 写法):
json
{
"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:
json
{
"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:
json
"palette": {
"blue": "#89B4FA",
"green": "#A6E3A1",
"text": "#CDD6F4"
}
改完保存,poshtheme <主题名> 或重开一个标签页就能看到效果。
5.8 升级与卸载
powershell
winget upgrade --id JanDeDobbeleer.OhMyPosh -e
winget uninstall --id JanDeDobbeleer.OhMyPosh -e
5.9 性能
Oh My Posh 每个提示符都会执行一次,Git 仓库大时可能卡顿(100ms+ 就能感觉到)。
powershell
oh-my-posh debug
会打印每个 segment 的耗时。优化手段:
- 关掉
fetch_status(最有效) - 少放几个语言版本 segment
- 大仓库里用
clean-detailed这类轻量主题 - 还是慢 → 换 Starship
6. 第 4 步:PSReadLine 补全与预测
PSReadLine 是 PowerShell 的「行编辑器」,负责语法高亮、历史、补全、预测。PowerShell 7 自带,一般不需要单独安装。
6.1 必开配置
写进 profile:
powershell
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 统一可以加这段(不生效就删掉,不影响其他功能):
powershell
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 后,能从模块的补全结果里预测参数:
powershell
Install-Module CompletionPredictor -Scope CurrentUser -Force
profile 里:
powershell
Import-Module CompletionPredictor -ErrorAction SilentlyContinue
PredictionSource 里的 Plugin 就会自动启用。
6.4 键位表
| 按键 | 作用 |
|---|---|
→ / End |
接受行内预测 |
Tab |
打开补全菜单 / 在菜单中下一个 |
Shift + Tab |
补全菜单上一个 |
↑ / ↓ |
前缀历史搜索 |
Ctrl + R |
反向搜索历史(装 PSFzf 后变模糊搜索) |
Ctrl + L |
清屏(保留当前输入) |
Ctrl + C |
取消当前行 |
F2 |
切换预测视图(需手动绑定) |
想给 F2 绑定视图切换:
powershell
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 一次性安装
powershell
$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 模块:
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 自动带图标:
powershell
Import-Module Terminal-Icons
zoxide:记住你去过的目录,按频率跳转:
powershell
zoxide init powershell | Out-String | Invoke-Expression # 写进 profile
z proj # 跳到任何名字含 proj 的常用目录
z - # 回上一个目录
zi # 交互式选择
进阶:zoxide init powershell --cmd cd 可以让 cd 本身支持模糊跳转。
fzf + PSFzf:
powershell
Ctrl + R # 模糊搜索命令历史
Ctrl + T # 模糊选择当前目录下的文件,插入命令行
posh-git :给 git checkout、git branch 等命令加 Tab 补全(分支名、远程名),不接管提示符。
powershell
git checkout feat<Tab> # 补全分支名
ConsoleGuiTools :Get-Process | Out-ConsoleGridView,在表格里筛选、排序、多选对象。
PSScriptAnalyzer :Invoke-ScriptAnalyzer -Path .\script.ps1,检查脚本里的常见问题。
bat:
powershell
bat README.md
bat --list-themes # 看可用主题
想默认用 bat 代替 cat:Set-Alias -Name cat -Value bat -Force(bat 检测到管道时会自动退化成纯文本,不会污染脚本)。
eza:
powershell
eza -la --group-directories-first --icons
eza --tree --level=2 --icons
ripgrep / fd:
powershell
rg "TODO" -n
fd "\.ps1$"
delta :配置到 ~/.gitconfig:
ini
[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:
powershell
fastfetch
fastfetch --gen-config # 生成配置文件,路径见输出
配置文件在 ~\.config\fastfetch\config.jsonc(fastfetch --gen-config 会打印实际路径)。
这套配色基于 Tokyo Night 的蓝/紫/青;想换颜色,改
display.color和logo.color即可。
gsudo:
powershell
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
# ============================================================
# 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 保存并生效
powershell
. $PROFILE
或者用模板里的快捷函数(新会话生效后):reload。
如果报错,先看错误信息定位到哪一行;临时跳过 profile 启动用:
powershell
pwsh -NoProfile
8.2 如果你用 VS Code
VS Code 的集成终端默认是 Windows PowerShell 5.1 ,且字体是独立设置的。在 settings.json 里加:
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 安装:
powershell
winget install --id Starship.Starship -e
profile:
powershell
Invoke-Expression (&starship init powershell)
配置:$HOME\.config\starship.toml,官方预设见 starship.rs/presets/。
两者不要同时初始化,否则提示符会打架。
10.2 给 Git 加颜色和图标
Oh My Posh 的 git segment 自动读取仓库状态,不需要额外配置。想更细可以加:
json
{
"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 预览版
想第一时间体验新特性(命令面板增强、新渲染器):
powershell
winget install --id Microsoft.WindowsTerminal.Preview -e
预览版和稳定版可以共存,配置独立。
11. 排错手册
11.1 满屏方块 / 问号
原因 :字体没装、没选对、或名字写错。 排查:
powershell
"`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 「无法加载文件,因为在此系统上禁止运行脚本」
powershell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
11.5 oh-my-posh 命令找不到
PATH 没刷新。关掉所有终端重开;或临时补 PATH:
powershell
$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
11.6 启动明显变慢
powershell
oh-my-posh debug
看哪个 segment 耗时。最常见是 Git 的 fetch_status。想对比的话,用 pwsh -NoProfile 启动一个不加载 profile 的会话即可。
11.7 winget 报错
powershell
winget source reset --force
winget source update
仍不行就去 Microsoft Store 更新「应用安装程序」。
11.8 设置保存后终端打不开 / 闪退
settings.json JSON 语法错了。恢复备份:
powershell
$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 只回滚配置
powershell
# 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 卸载软件
powershell
$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 }
模块:
powershell
Uninstall-Module Terminal-Icons, PSFzf, CompletionPredictor, posh-git, Microsoft.PowerShell.ConsoleGuiTools, PSScriptAnalyzer -AllVersions -Force
12.3 删除字体
设置 → 个性化 → 字体 → 搜索字体名 → 卸载(仅对当前用户安装的字体有效)。
或手动删注册表项 + 文件:
powershell
# 先确认要删什么!
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:命令速查表
powershell
# 重新加载配置
. $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,随时可以重新开始------所有配置都是纯文本,删了就没了,坏不了系统。
希望这篇教程能帮你搭出一套顺手的终端。