1. 为什么我最终把默认终端从 Windows Terminal 换成了 WezTerm先说结论在 Win11 上折腾终端这件事我前后换过三四套方案最后稳定在 WezTerm PowerShell 7 这个组合上用了大半年没再动过。不是因为 Windows Terminal 不好而是 WezTerm 在几个我特别在意的点上做得更彻底——跨平台配置一份文件走天下、内置多路复用、GPU 加速渲染、Lua 脚本配置带来的可编程性这些加在一起让它从一个终端变成了一套可以长期演进的工作环境。如果你现在的状态是Win11 自带终端用着还行但总觉得差点意思或者你同时用 Windows、macOS、Linux希望配置能统一又或者你被 PowerShell 的默认外观和字体折磨过——那这篇内容就是写给你的。我会从安装、配置、把 PowerShell 设成默认 shell、主题同步、字体渲染、常见坑这几个角度把整套流程讲透包括我踩过的那些坑。需要提前说明的是WezTerm 本身是一个终端模拟器terminal emulator它负责的是显示和交互这一层真正执行命令的是 shell也就是 PowerShell。很多人一开始会混淆这两个概念导致配置的时候找不到方向。记住这个分工WezTerm 管窗口、字体、颜色、快捷键、分屏PowerShell 管命令、补全、别名、脚本。主题同步的本质就是让这两层的外观协调一致。另外PowerShell 这里我强烈建议用 PowerShell 7也就是 pwsh而不是系统自带的 Windows PowerShell 5.1。原因后面会详细讲简单说就是跨平台、性能更好、语法更现代、对 UTF-8 支持更到位。Win11 自带的 5.1 是历史包袱能不用就不用。2. 安装环节别急着双击 exe先想清楚装在哪2.1 WezTerm 的三种安装方式对比WezTerm 在 Windows 上的安装方式主要有三种我逐一试过给你一个直接的结论。安装方式优点缺点适合谁官网 exe 安装包简单直接双击即装更新要手动下载覆盖只想快速用起来的人winget 安装一条命令搞定可批量更新版本可能略滞后喜欢命令行管理软件的人Scoop 安装更新最方便配置集中需要先装 Scoop长期折腾、追求可维护性的人我最后选的是 winget命令很简单winget install wez.wezterm装完之后WezTerm 会自动关联.wezterm.lua配置文件。这里有个细节WezTerm 的配置文件默认放在用户主目录下也就是C:\Users\你的用户名\.wezterm.lua。如果你之前装过又卸载过记得检查这个文件有没有残留否则新装的版本会直接读取旧配置出现一些莫名其妙的行为。提示安装完成后建议先在 PowerShell 里执行wezterm --version确认版本再执行wezterm启动一次看看能不能正常打开窗口。如果闪退多半是显卡驱动或配置文件的锅先重命名配置文件再试。2.2 PowerShell 7 的安装与版本选择PowerShell 7 的安装我推荐用 wingetwinget install Microsoft.PowerShell装完之后你会有两个 PowerShell一个是系统自带的powershell.exe5.1一个是新装的pwsh.exe7.x。在 WezTerm 里我们要指定用后者。这里插一句关于执行策略的事。很多人第一次跑脚本会碰到禁止运行脚本的报错然后去搜set-executionpolicy。我的建议是不要一上来就设成Unrestricted用RemoteSigned就够了——本地脚本随便跑从网络下载的脚本需要签名。命令是Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser注意-Scope CurrentUser这个参数它只影响当前用户不需要管理员权限也不会污染系统级设置。这是我踩过坑之后养成的习惯能改用户级就不动系统级。2.3 字体被最多人忽略、却最影响观感的一环终端好不好看字体占一半。WezTerm 默认字体在 Windows 上其实还行但如果你想要那种图标 文字混排的效果比如文件列表里显示文件夹图标、Git 状态图标就必须装 Nerd Font。我常用的是JetBrainsMono Nerd Font安装方式winget install --idDEVCOM.JetBrainsMonoNerdFont装完之后字体名在配置里要写对是JetBrainsMono Nerd Font不是JetBrains Mono。这两个名字差一个空格和几个字母但效果天差地别——写错了图标就会变成方块。这个坑我见过太多人踩。3. 把 PowerShell 7 设为 WezTerm 默认启动项3.1 理解 WezTerm 的默认程序配置逻辑WezTerm 启动时默认会调用系统默认 shell。在 Windows 上如果你不配置它可能启动的是cmd.exe或者powershell.exe5.1。要让它启动 PowerShell 7需要在配置文件里显式指定。配置文件是 Lua 格式的结构大致是这样local wezterm require wezterm local config wezterm.config_builder() config.default_prog { pwsh.exe, -NoLogo } return config这里default_prog是一个数组第一个元素是可执行文件名后面是参数。-NoLogo的作用是跳过 PowerShell 启动时那段版权信息让终端更干净。你也可以加-NoProfile来跳过配置文件加载但我不建议——那样你的别名、函数、模块都不会加载等于自废武功。3.2 为什么用 pwsh.exe 而不是完整路径有人会问为什么不写完整路径C:\Program Files\PowerShell\7\pwsh.exe答案是只要pwsh.exe在 PATH 里写文件名就够了而且更可移植。如果你哪天升级了 PowerShell 版本路径变了写死路径的配置就废了。验证pwsh是否在 PATH 里可以在任意终端执行Get-Command pwsh如果返回了路径说明没问题。如果没有说明安装时没勾选添加到 PATH重新装一遍或者手动加一下。3.3 启动参数的那些讲究除了-NoLogo还有几个参数值得了解-NoExit执行完命令后不退出一般配合-Command用单独用没意义。-WorkingDirectory指定启动目录比如你想每次打开都在某个项目文件夹可以加这个。-ExecutionPolicy Bypass临时绕过执行策略只对当前会话有效。这个参数在跑一些安装脚本时常见但日常配置里不建议加会削弱安全性。我的配置里一般就-NoLogo一个参数保持简洁。启动速度也更快。4. 主题同步让 WezTerm 和 PowerShell 看起来是一套东西4.1 主题同步到底同步的是什么这是本篇最核心的部分也是最容易做歪的地方。很多人以为主题同步就是给 WezTerm 换个配色其实远不止。真正的一致体验包含四层终端配色方案背景色、前景色、光标色、选区色这些由 WezTerm 控制。Shell 提示符样式也就是你敲命令时前面那个PS C:\Users\...这个由 PowerShell 的 prompt 函数控制。语法高亮与补全的配色比如你输入git statusgit显示什么颜色这由 PowerShell 模块控制。字体与图标终端和 shell 用同一套字体图标才能对齐。只做第一层你会得到终端好看但提示符很土的割裂感。四层都做才是真正的一致。4.2 WezTerm 侧选一套靠谱的配色WezTerm 内置了大量配色方案可以用命令列出wezterm ls-fonts --list-system不对列配色是另一个命令。实际上你可以在配置文件里直接写方案名WezTerm 支持几百种内置方案。我常用的是Catppuccin Mocha写法config.color_scheme Catppuccin Mocha如果你想要更精细的控制可以自定义颜色表config.colors { foreground #cdd6f4, background #1e1e2e, cursor_bg #f5e0dc, cursor_fg #1e1e2e, selection_bg #585b70, selection_fg #cdd6f4, }自定义的好处是你可以把配色和你的 PowerShell 主题精确对齐。比如 Catppuccin 官方给出了每个颜色的十六进制值你照着填就行。4.3 PowerShell 侧用 Oh My Posh 做提示符PowerShell 的提示符默认很朴素要做得好看主流方案是 Oh My Posh。安装winget install JanDeDobbeleer.OhMyPosh装完之后在 PowerShell 配置文件里加一行初始化。配置文件路径是$PROFILE可以用notepad $PROFILE打开如果文件不存在会提示创建。oh-my-posh init pwsh --config $env:POSH_THEMES_PATH\catppuccin_mocha.omp.json | Invoke-Expression这里的catppuccin_mocha.omp.json就是和 WezTerm 配色对应的主题文件。Oh My Posh 自带了这个主题路径在$env:POSH_THEMES_PATH下。这样终端背景和提示符就是同一套色系视觉上完全统一。4.4 语法高亮让命令输入也有颜色光有提示符还不够输入命令时的实时高亮也很影响体验。这个用PSReadLine模块PowerShell 7 自带但需要配置。在$PROFILE里加Import-Module PSReadLine Set-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineOption -Colors { Command #89b4fa Parameter #f9e2af String #a6e3a1 Operator #94e2d5 Variable #f38ba8 }PredictionSource History会基于历史记录给你灰色提示按右方向键就能补全非常顺手。ListView会把候选列出来比默认的内联提示更清晰。颜色值我用的还是 Catppuccin 那套和前面保持一致。到这里四层同步就完成了三层剩下字体那层前面已经解决。5. 那些让我折腾到半夜的坑5.1 中文乱码编码问题的根源与解法Win11 上终端中文乱码是个老问题根源在于 Windows PowerShell 5.1 默认用 GBK 编码而现代工具链普遍用 UTF-8。如果你坚持用 5.1乱码几乎不可避免。换成 PowerShell 7 之后默认就是 UTF-8问题基本消失。但如果你在某些场景下还是遇到乱码检查两个地方第一WezTerm 的配置里可以显式指定编码虽然一般不用config.default_cwd C:\\这个和编码无关我放错了。真正相关的是确保 PowerShell 的输出编码[Console]::OutputEncoding [System.Text.Encoding]::UTF8 $OutputEncoding [System.Text.Encoding]::UTF8这两行可以放进$PROFILE一劳永逸。第二如果你用 SSH 连到别的机器远端也要是 UTF-8 环境否则乱码是远端产生的本地怎么调都没用。5.2 图标显示成方块Nerd Font 的经典问题前面提过字体名写错会导致图标变方块。但还有一种情况字体名写对了图标还是方块。这通常是因为你用的 Nerd Font 版本太老缺少某些新图标。解决办法是更新字体到最新版或者换一个图标集更全的字体比如CaskaydiaCove Nerd Font。另外Oh My Posh 的主题如果用了图标而你的字体不支持也会显示方块。可以在 Oh My Posh 配置里把图标关掉或者换一个纯文字主题。我个人的做法是字体装全主题随便换这样最省心。5.3 启动慢配置文件里的性能陷阱WezTerm 启动慢常见原因有两个。一是配置里加载了太多字体回退font fallback二是default_prog指向的 shell 启动本身慢。PowerShell 7 启动慢多半是$PROFILE里加载了太多模块。可以用这个命令测一下启动耗时Measure-Command { pwsh -NoLogo -Command exit }如果超过 1 秒就要审视$PROFILE了。把不常用的模块改成按需加载能省不少时间。Oh My Posh 本身启动不算慢但如果主题文件很复杂也会拖后腿。可以试试--config指向一个精简版主题。5.4 分屏与多路复用WezTerm 的隐藏王牌WezTerm 内置了终端多路复用不需要 tmux 就能分屏。快捷键默认是CtrlShiftAlt加方向键但我觉得不好按改成了更顺手的config.keys { { key d, mods CTRL|SHIFT, action wezterm.action.SplitHorizontal }, { key e, mods CTRL|SHIFT, action wezterm.action.SplitVertical }, }这样CtrlShiftD水平分屏CtrlShiftE垂直分屏和很多编辑器的习惯一致。分屏之后每个面板可以独立跑 PowerShell互不干扰。这个功能一旦用上就回不去了。6. 一套可以直接抄的完整配置6.1 WezTerm 配置文件全文把下面这段保存为C:\Users\你的用户名\.wezterm.lualocal wezterm require wezterm local config wezterm.config_builder() -- 默认启动 PowerShell 7 config.default_prog { pwsh.exe, -NoLogo } -- 配色 config.color_scheme Catppuccin Mocha -- 字体 config.font wezterm.font(JetBrainsMono Nerd Font, { weight Regular }) config.font_size 11.0 -- 窗口 config.window_background_opacity 0.95 config.window_decorations RESIZE config.initial_cols 120 config.initial_rows 32 -- 光标 config.default_cursor_style BlinkingBar config.cursor_blink_rate 500 -- 滚动 config.scrollback_lines 10000 -- 快捷键 config.keys { { key d, mods CTRL|SHIFT, action wezterm.action.SplitHorizontal }, { key e, mods CTRL|SHIFT, action wezterm.action.SplitVertical }, { key w, mods CTRL|SHIFT, action wezterm.action.CloseCurrentPane { confirm false } }, } return config几个参数解释一下。window_background_opacity 0.95是轻微透明既好看又不影响阅读设太低会看不清。scrollback_lines 10000是回滚缓冲行数默认是 3500调大之后能翻更久的历史。window_decorations RESIZE去掉了标题栏但保留边框配合 Win11 的圆角很好看。6.2 PowerShell $PROFILE 全文用notepad $PROFILE打开填入# 编码 [Console]::OutputEncoding [System.Text.Encoding]::UTF8 $OutputEncoding [System.Text.Encoding]::UTF8 # Oh My Posh oh-my-posh init pwsh --config $env:POSH_THEMES_PATH\catppuccin_mocha.omp.json | Invoke-Expression # PSReadLine Import-Module PSReadLine Set-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineOption -Colors { Command #89b4fa Parameter #f9e2af String #a6e3a1 Operator #94e2d5 Variable #f38ba8 } # 常用别名 Set-Alias ll Get-ChildItem Set-Alias g git保存后重启 WezTerm应该就能看到一套配色统一、提示符漂亮、输入有高亮的终端了。6.3 验证清单配置完之后按这个清单逐项确认检查项预期结果不达标怎么办启动 shell显示 PowerShell 7 版本号检查 default_prog 和 PATH配色背景深色、文字浅色检查 color_scheme 拼写提示符有图标、有 Git 状态检查 Oh My Posh 初始化图标正常显示不是方块检查 Nerd Font 是否装好中文不乱码检查编码设置分屏CtrlShiftD 能分检查 keys 配置7. 关于长期维护的几点个人体会配置这东西最怕的就是配完就忘。我现在的做法是把.wezterm.lua和$PROFILE都放进一个 Git 仓库换机器的时候 clone 下来软链接过去就行。Windows 上做软链接需要管理员权限或者开启开发者模式命令是New-Item -ItemType SymbolicLink -Path $HOME\.wezterm.lua -Target D:\dotfiles\.wezterm.lua这样配置文件的实际内容在 D 盘主目录里只是个链接改哪边都一样。另外WezTerm 和 PowerShell 都在快速迭代偶尔会有配置项废弃或改名。我的习惯是每次大版本更新后先看一遍 release notes再决定要不要动配置。盲目升级有时候会踩到兼容性问题尤其是 Oh My Posh 的主题文件格式历史上改过好几次。最后说一个我用了很久才意识到的事终端配置的目标不是最炫而是最不打断思路。配色再花哨如果每次启动要等三秒或者分屏快捷键记不住那都是负优化。我现在这套配置启动一秒内快捷键就三个主题一年没换过——稳定比什么都重要。