
从 Windows 换到 WSL Ubuntu 跑开发之后我最大的执念就是把终端收拾成 macOS/iTerm2 那种观感。倒不是说 Windows 自带的命令行不能用而是每天对着几十个窗口干活眼睛舒服这件事真的很影响耐心。折腾了几天我把 Windows Terminal、WSL、Ubuntu 的 shell、字体、配色一路调到位现在开终端基本能骗过自己“在用 macOS”。这篇就把完整过程写下来从 WSL 安装迁移到终端配置、从字体到配色全程是我实测过的路径弯路和坑也一并列出来给想在 Windows 上还原 iTerm2 手感的朋友做个参考。1. 先搞清楚为什么要用 WSL Ubuntu 而不是直接折腾 Windows 终端美化终端只是表层真正值得投入时间的是把 Ubuntu 环境搬到 Windows 上。以前我处理临时脚本、跑服务、改配置习惯开 Git Bash 或者直接打 PowerShell但时间一长就发现限制太多很多 Linux 工具链装起来别扭文件权限模型也对不上时不时还会遇到路径分隔符的坑。WSL 的出现把这些老问题都解决了它让你在 Windows 里拥有一套完整的 GNU 环境而终端外观又不受 Ubuntu 默认风味的影响可以按自己的审美重新布置。1.1 WSL 2 相比传统虚拟机的核心优势WSL 2 是跑在轻量虚拟机里的文件系统性能比 WSL 1 好非常多Docker、Redis、编译工具都能顺畅跑。我个人的体验是WSL 2 和 VMware/VirtualBox 这类传统虚拟机的最大区别在于“打开即用”不需要给 Ubuntu 划分独立内存和磁盘不用管图形界面的启动流程终端启动速度几乎和原生 cmd 一样快。对只依赖命令行的场景WSL 2 就是性价比最高的 Linux 运行方式。1.2 Windows 终端和 iTerm2 的差距在哪里iTerm2 在 macOS 上之所以受追捧核心不是它功能多复杂而是它把“终端窗口”这个概念做得足够细腻半透明毛玻璃背景、柔和配色、清晰字体渲染让人感觉不到工具的存在。Windows 原生 cmd 和 PowerShell 窗口在这方面确实差一截默认样式太朴素字体渲染也比较粗糙。好消息是 Windows Terminal 这些年追得很快支持透明度、背景模糊、自定义配色表、多标签页底层能力已经具备了复刻 iTerm2 的基础。1.3 我这套方案的最终组成我最终保留的环境组合是Windows 11 WSL 2 Ubuntu 22.04 LTS Windows Terminal zsh Starship Nerd Fonts iTerm2 风格配色。后面每一个环节我都会展开讲给出可复制的命令和配置片段确保你看完能照着搭出一套差不多的环境。2. WSL 与 Ubuntu 的落地细节安装、迁移到 D 盘、首启避坑很多人美化失败不是因为配色不好看而是 WSL 环境本身就没搭好。现在 Windows 11 上装 WSL 已经非常简单了但旧版本 Windows 或者全新系统的默认设置仍然会遇到一些隐藏雷区。我把安装和迁移过程完整走了一遍下面是我整理出的可靠操作顺序。2.1 从零开始安装 WSL 2 和 Ubuntu如果你用的是 Windows 10 2004 以上版本或 Windows 11直接在管理员 PowerShell 里执行wsl --install -d Ubuntu-22.04这条命令会一次性启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台”两个 Windows 功能然后下载安装 Ubuntu 发行版。装完重启系统首次启动 Ubuntu 时会让你创建 UNIX 用户名和密码。这里有个小提醒用户名不要带空格和特殊符号尽可能全小写否则后续不少工具会有兼容问题。安装完成后用下面几条命令确认状态wsl -l -v wsl --status wsl --updatewsl -l -v的输出里会列出发行版名称、WSL 版本和当前状态正常情况下 Ubuntu 应该显示为 VERSION 2。如果显示的是 1说明默认版本设置不对执行wsl --set-default-version 2再重试。2.2 把 WSL 发行版迁移到 D 盘的正确姿势很多人的 C 盘空间本来就不充裕WSL 的虚拟磁盘会在使用过程中不断膨胀。把发行版迁到 D 盘是江湖流传已久的刚需操作但网上不少教程让直接改%USERPROFILE%\.wslconfig去指定路径实测效果并不好。最稳的办法是导入导出# 1. 关闭 WSL 所有发行版 wsl --shutdown # 2. 将 Ubuntu 导出为 tar 压缩包 wsl --export Ubuntu D:\wsl-backup\ubuntu.tar # 3. 注销当前发行版注意这会删除 C 盘里的旧虚拟磁盘 wsl --unregister Ubuntu # 4. 从备份导入到新目录 wsl --import Ubuntu D:\WSL\Ubuntu D:\wsl-backup\ubuntu.tar --version 2迁移完成后有个最容易忽略的坑导入的发行版默认用户会变成 root而不是你原来创建的普通用户。解决方法是进入 WSL 后编辑/etc/wsl.conf[user] default你的用户名 [boot] systemdtrue保存后执行wsl --shutdown再重新进入用户就恢复正常了。systemdtrue是我强烈建议开启的选项它会让你在 Ubuntu 里使用 systemctl 管理服务Docker、SSH 等工具的安装配置会省心很多。2.3 常见安装失败错误码与处理思路WSL 安装失败是搜索量非常大的话题这里把最典型的几个错误码列一下方便对照处理。错误码常见原因处理思路0x8007019eWSL 内核组件缺失或过旧管理员 PowerShell 执行wsl --update0x80370114虚拟机平台未启用控制面板开启“虚拟机平台”或执行wsl --install0x80070003安装路径存在系统保留符换一个纯粹英文目录安装0x80370102虚拟化被关闭进入 BIOS 开启 Intel VT-x / AMD SVMCannot find path命令行目录被占用先wsl --shutdown再操作迁移如果出现的是WslRegisterDistribution failed with error: 0x8007019e十有八九是内核没更新。旧版本 Windows 需要手动下载 WSL2 内核更新包新版本直接执行wsl --update即可。我建议遇到任何 WSL 报错第一步都先跑一次wsl --update和wsl --shutdown能省去大量排查时间。3. 终端模拟器选型和 Windows Terminal 的透明化配置Ubuntu 装好之后紧接着要决定用什么终端窗口来承载它。市面上可选方案不少Alacritty、WezTerm、Hyper 都有各自的拥趸但我最终留在 Windows Terminal 上。理由很简单它和 Windows 系统的集成度最高设置界面直观配置采用 JSON 文件可以版本管理而且对 WSL 空洞的支持最成熟——所谓“空洞”就是 WSLg 图形程序在 Windows 终端里的显示问题。3.1 为什么 Windows Terminal 是最适合复刻 iTerm2 的基础Windows Terminal 支持多标签、分割窗格、自定义快捷键、背景图片、透明度、模糊、配色方案。这些功能组合起来已经足够模拟 iTerm2 的窗口质感。Alacritty 虽然渲染速度极快但配置门槛高透明效果依赖系统级设置不如 Windows Terminal 来得省心。我更欣赏的是 Windows Terminal 的配置结构。按Ctrl ,打开设置界面或者直接编辑settings.json你就能看到全部配置项。每个终端 Profile 可以单独指定字体、背景、透明度、启动目录这意味着你可以给 Ubuntu 配一套 iTerm2 风格给 PowerShell 保留默认风格互不干扰。3.2 修改 settings.json 让窗口半透明无边框在 Windows Terminal 的 JSON 配置文件里我找到全局的profiles段落把下面这些属性写入你想要美化的 Ubuntu Profile 或默认配置{ profiles: { defaults: { opacity: 88, useAcrylic: true, cursorShape: bar, font: { face: JetBrainsMono Nerd Font, size: 11, weight: normal } } } }其中最关键的是opacity和useAcrylic。opacity控制整体透明度数值越高越不透明useAcrylic启用 Windows 的亚克力模糊效果让背景像是蒙了一层毛玻璃。iTerm2 默认就有透明背景所以这步是实现“mac 手感”的第一印象。如果你想进一步隐藏 Windows Terminal 顶部标签栏让窗口更纯净可以全局配置{ alwaysShowTabs: false, showTabsInTitleBar: false, centerOnLaunch: true, launchMode: default }这里我踩过一个坑当透明度 模糊同时开启时在部分 Windows 10 版本上终端窗口拖动会出现明显的掉帧和文字重影尤其开了 GPU 加速的机器反而更明显。如果遇到这种情况把useAcrylic改成false只保留opacity的纯透明效果就不会闪了。3.3 让终端显示 CPU/GPU 等系统信息的启动场景很多 iTerm2 用户习惯一开终端就显示 system infomacOS 上常见的 neofetch 可以让窗口有“个性签名”的味道。WSL 里也可以用装 neofetch 或轻量版 fastfetchsudo apt install fastfetch fastfetch个人版 fastfetch 启动比 neofetch 快很多输出信息也更丰富。把它加到 shell 配置文件的启动命令里每次新开终端上半屏就是系统信息配合半透明背景视觉效果非常接近我记忆里的 iTerm2 mac 工作台。4. 复刻 iTerm2 观感的核心字体、配色、Shell 提示符终端窗口的“骨架”搭好后重头戏来了配色方案、字体、shell 提示符。这三样决定了一台终端是“能用”还是“好看”。我分三个小步骤把我的实操流程说清楚。4.1 安装 Nerd Fonts 字体解决图标和特殊符号显示iTerm2 的界面上能看到很多特殊符号、箭头、分支图标这些都不是普通字体能渲染的。Nerd Fonts 项目把大量图标字形合并进了常见等宽字体是终端美化绕不开的基础。我选择的是JetBrainsMono Nerd Font它既有 JetBrains Mono 编程字体的清晰度又补全了图标字符。字体安装是 Windows 侧的事直接去 Nerd Fonts 官网的 Release 页面下载对应字体文件右键“为所有用户安装”即可。装完后回到 Windows Terminal 设置里把 Profile 的字体 face 改成font: { face: JetBrainsMono Nerd Font, size: 11 }注意字体名称要完全匹配有时安装后显示为 “JetBrainsMono Nerd Font”有时是 “JetBrainsMono NF”。在 Windows Terminal 字体下拉列表里能看到准确名称直接复制过去最稳。4.2 套用 iTerm2 经典配色我手调的 Oceanic Next 近似值配色是我折腾最久的部分。iTerm2-Color-Schemes 这个项目收录了 200 多种终端配色其中 Oceanic Next 是我最常用的一款观感柔和背景偏墨蓝前景色是灰白长时间盯屏幕不太累。这里手调了一版适合 Windows Terminal JSON 配置的近似值你可以直接放进settings.json的schemes数组里{ name: iTerm2 Oceanic Next, foreground: #D5CED9, background: #121B21, cursorColor: #B7B7B7, black: #121B21, red: #E4605A, green: #9BB084, yellow: #C5A56C, blue: #7E8AA2, purple: #B77CA2, cyan: #6BA7AD, white: #D5CED9, brightBlack: #5A6A7A, brightRed: #E4605A, brightGreen: #9BB084, brightYellow: #C5A56C, brightBlue: #7E8AA2, brightPurple: #B77CA2, brightCyan: #6BA7AD, brightWhite: #FFFFFF }然后在 Profile 里启用这个配色colorScheme: iTerm2 Oceanic Next如果懒得手动敲iTerm2-Color-Schemes 项目的windowsterminal目录里有很多现成 JSON 文件下载后直接复制到你的schemes数组中省时省力。不过要注意所以方案的 Windows Terminal 版本并不都是最新维护的个别旧的方案缺少 bright 色系导入后显示会偏暗手动补一下就行了。4.3 Shell 提示符从 bash 转向 zsh Starship字体和配色解决的是“纸面颜色”让终端更有个性的是提示符。macOS 默认 zsh 提示符简洁干净但我想要更丰富一点的信息——当前目录、Git 分支、命令耗时这些最好一眼就能看到。Starship 是我试下来最顺手的方案它跨平台、配置简单、渲染快而且默认风格就很接近 iTerm2 的清爽感。在 Ubuntu WSL 里安装 zsh 和 Starshipsudo apt update sudo apt install -y zsh chsh -s $(which zsh) # 安装 starship推荐下载 release 包避免直接 curl 管道安装 curl -sS https://starship.rs/install.sh | sh安装完后在~/.zshrc末尾追加eval $(starship init zsh)再创建一个~/.config/starship.toml这是 Starship 的核心配置文件。我的最小化配置长这样[character] success_symbol [](bold green) error_symbol [](bold red) [directory] truncate_to_repo false read_only [git_branch] symbol [time] disabled true [package] disabled true设置完成后执行exec zsh提示符立刻变成带有目录和 Git 分支信息的样式。Starship 的配色默认就偏克制和 Oceanic Next 背景放在一起非常协调不需要额外再调。如果你的迁移用户设置没处理正确进入终端会显示 root 身份Starship 也会用红色提示符警告这时候先回头修改/etc/wsl.conf里的用户配置不要硬撑着往下走。5. 从“看着像”到“用起来顺手”中文字体、目录色彩和日常工具链美化不只是皮相如果终端里中文显示成方块或者命令输出乱成一团再好看的配色也白搭。我在 WSL 里补了中文字体和几个常用命令行工具让整个终端在“扮成 iTerm2”之后依然能干实事。5.1 解决终端中文显示成方块的问题很多朋友在 Windows 终端里跑 WSL Ubuntu执行 apt 安装包时看到中文注释全是豆腐块那是因为 WSL 里没有可用的中文字形。安装 Noto CJK 字体即可解决sudo apt install -y fonts-noto-cjk fonts-noto-color-emoji这个包体积不小但装上之后终端、vim、fastfetch 里的中文都能正常渲染值得花这个磁盘空间。至于“Ubuntu 中文输入法怎么设置”这类问题如果你需要在 WSL 里打中文可以再装一个 fcitx5 框架命令大概是sudo apt install -y fcitx5 fcitx5-chinese-addons不过我的经验是终端场景真正高频的需求是显示中文而不是输入中文。我日常代码注释、日志文件查看装好 Noto CJK 就已经够用了输入法更多是在 Windows 侧直接解决没必要在 WSL 里再开一套输入法环境徒增维护成本。5.2 用 eza 和 bat 让 ls/cat 也有一点 mac 气质macOS 终端的 ls 输出颜色和 Linux 默认的寡淡风格完全不同。你可以在 WSL 里安装 eza 和 bat让列表和文件预览都换一套更现代的观感sudo apt install -y eza bat接着在.zshrc里追加别名alias lseza --icons --group-directories-first alias lleza -l --icons --group-directories-first alias catbatcat这里有一个不太显眼但实用的点eza 默认会读取系统颜色配置配合前面的 Oceanic Next 配色目录、可执行文件、压缩包的颜色会很自然地区分开来不需要额外设置。bat 则是 cat 命令的高亮版预览代码文件时自带语法高亮视觉效果非常终端。5.3 WSL 里常见的开发组件怎么和美化后的终端配合如果你和我一样在 WSL 里跑 Docker 或者做 Python 开发环境能不能和终端配置兼容其实很关键但往往被忽略。比如 Docker 安装好了之后普通用户执行 docker 命令需要加入 docker 组否则每次命令前面都要加 sudo颜色再漂亮用起来也烦躁sudo usermod -aG docker $USER newgrp docker docker run hello-world再比如使用 WSL2 跑 GPU 相关任务时Windows 侧安装 NVIDIA 驱动后WSL 里运行nvidia-smi应该能看到显卡信息。这一步没做好你在终端里看到再美的提示符也跑不动模型。惯用的健康检查命令是nvidia-smi有输出就说明 CUDA 环境通了一半剩下的就是按官方文档装对应版本的 PyTorch 或 CUDA Toolkit。这些工具链配置和终端美化没有直接关系但它们决定了一个“漂亮的终端”能不能真的用起来。我的体会是先让环境健康起来再谈观感否则你复制了我所有的配色代码最后还是因为某个权限错误卡在原地。6. 我最终留下的设置和几个最容易翻车的细节这个坑我踩得最多值得单独拿出来说。美化终端的教程一搜一大把但很多人照做之后发现效果和截图差很多问题大多出在 Windows Terminal 版本、WSL 发行版路径、字体安装这几个小地方。6.1 配置最容易翻车的三个细节第一Windows Terminal 的 JSON 配置文件会随版本更新改变 schema最典型的是useAcrylic和opacity在较新版本里合并成了一套新属性。如果直接复制网上的老配置很可能出现界面设置里显示“无法应用透明度”的情况。遇到这种打开settings.json看文件头部的$schema版本再去查对应的配置项名称。第二Nerd Fonts 字体安装后应用不生效有一个隐藏原因Windows Terminal 对于 WSL 里的字体渲染走的是老式 GDI 路径而不是 DirectWrite。这个问题主要体现在一部分特殊符号上。Windows Terminal 1.18 之后的版本默认开启了字重 fallback如果遇到特殊符号显示不全把字体设置为 “JetBrainsMono Nerd Font Mono” 这个变体Enforce consistent rendering 会更稳一些。第三WSL 和 Windows 终端之间的颜色映射。WSL 里的 ANSI 颜色序列和 Windows Terminal 配色方案是对应的但你如果同时开着 tmux那就多了一层颜色转换。我自己的做法是终端模拟层的配色用 Windows Terminal 管WSL 内部的主题交给 Starship 管两层职责分开调起来不糊涂。6.2 我的习惯把 settings.json 纳入版本管理配置这种东西最怕改着改着就回不去了。Windows Terminal 的settings.json路径大致在%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.jsonWSL 里的配置文件集中在~/.zshrc和~/.config/starship.toml。我把这三个文件单独放到一个 AppConfig 目录用 git 管理每次微调终端风格后提交一次。这样如果某天升级 Windows Terminal 把配置搞坏了或者新换一台电脑想复刻整套环境只要拉代码、装字体、跑一遍安装脚本十分钟就能回到熟悉的界面。抛去美观不谈这种“配置即代码”的思路本身就是高效的做法。6.3 最终这套方案在我机器上的真实表现目前我的 Windows 11 WSL 2 Ubuntu 22.04 终端打开之后是一个 88% 透明、带有轻微模糊感的大窗口背景能看到桌面壁纸的暗部轮廓前景是 Oceanic Next 柔和灰蓝提示符一行显示用户、目录和 Git 分支Git 分支有变化时颜色会轻微改变。装好 eza 之后列出目录时图标和文件类型颜色层次分明fastfetch 在开终端时展示系统信息——这些细节叠加起来已经让我产生了很接近 iTerm2 的熟悉感。唯一和原生 macOS 体验有明显差距的地方是字体渲染的微调项。Windows 上 ClearType 和 macOS 的字体平滑算法差异客观存在再努力也只能接近做不到 100% 一致。不过这是系统层面的事不影响日常使用。如果让我给后来者一个最重要的建议那就是先装字体。Nerd Fonts 是这一切观感的地基字体没装对后面抄再多配色方案也出不来效果。字体和配色到位之后shell 提示符只需要一小时的耐心就能调到满意状态——剩下的细节交给使用过程中的慢慢打磨就好。