问题现象

如果你使用了 oh-my-posh、Powerlevel10k、Starship 这类美化过的终端主题,大概率会遇到这个问题:VSCode 集成终端里的各种图标(文件夹、Git 分支、锁、电灯泡等)全都变成了方块或者问号,就像这样:

  • 配置前
    1775064849336.png

明明在系统自带的终端里显示正常,一到 VSCode 里就全乱了,看着特别难受。


问题原因

乱码的本质非常简单:

这些主题使用了大量 Nerd Font 提供的特殊图标 glyph,而 VSCode 终端没有正确配置使用包含这些图标的字体。

  • Nerd Font:一款专门为开发者补丁了大量图标字形的字体项目
  • 默认字体:VSCode 使用的默认字体(如 Consolas、Monaco)不包含这些图标字形
  • 所以当终端尝试渲染这些图标时,因为找不到对应的字形,就显示成方块(□)或问号(�)了

解决方案

解决这个问题只需要三步:安装 Nerd Font → 配置 VSCode → 重启验证。

第一步:安装 Nerd Font 到系统

你需要安装一款包含完整 Nerd Font 图标集的字体到你的系统。

推荐几款比较常用的:

  • MesloLGS NF:Powerlevel10k 默认推荐,比较轻巧
  • FiraCode Nerd Font:连字支持很好,编程看着舒服
  • JetBrainsMono Nerd Font:JetBrains 出品,配合 IDE 体验佳
  • Hack Nerd Font:开源,清晰易读

下载方式

你可以从 Nerd Font 官网 下载,或者直接使用命令:

Windows (PowerShell):

# 使用 scoop 安装
scoop install nerd-fonts/Meslo-NF
scoop install nerd-fonts/JetBrainsMono-NF

macOS (Homebrew):

# 使用 homebrew 安装
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-meslo-lg-nerd-font

Linux (Debian/Ubuntu):

# 手动下载安装
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/JetBrainsMono.zip
unzip JetBrainsMono.zip
fc-cache -fv

注意:一定要确认是 Nerd Font 版本,普通版本不包含额外图标。


第二步:配置 VSCode 终端字体

打开 VSCode 的设置(快捷键 Ctrl+,Cmd+,),搜索 Terminal Integrated Font Family

有两种配置方式:

方式一:图形界面配置

Terminal › Integrated: Font Family 输入框中填入你安装的 Nerd Font 名称:

'MesloLGS NF', 'JetBrainsMono Nerd Font', monospace

提示:字体名称需要和你实际安装的一致,可以在系统字体查看器里确认准确名称。

方式二:直接编辑 settings.json

Ctrl+Shift+P 打开命令面板,输入 Preferences: Open Settings (JSON),在文件中添加:

{
  // 其他配置...
  "terminal.integrated.fontFamily": "JetBrainsMono Nerd Font"
}

如果你想让编辑器也使用相同字体(推荐),可以一并设置:

{
  "editor.fontFamily": "JetBrainsMono Nerd Font",
  "terminal.integrated.fontFamily": "JetBrainsMono Nerd Font"
  "editor.fontLigatures": true, // 开启连字功能,让 -> 变成漂亮的箭头
}

第三步:重启 VSCode 终端

关闭当前终端标签页,重新打开一个新的终端,你就能看到图标正常显示了:

  • 配置后

1775064997028.png

完美!


针对不同场景的特殊说明

Windows + WSL 场景

如果你在 WSL 中使用美化主题,只需要配置VSCode 端的字体即可,WSL 内部不需要做额外修改。因为 VSCode 集成终端是在 Windows 侧渲染的,字体由 Windows 侧的 VSCode 控制。

oh-my-posh 特定配置

如果你使用的是 oh-my-posh,确保你的配置文件 ~/.poshthemes/*.json 中指定的字体和你 VSCode 配置的一致,否则依然可能有个别图标不对。

为什么我字体装了还是乱码?

最常见的几个原因:

  1. 字体名称写错了:比如你装的是 JetBrainsMono Nerd Font,你写成了 JetBrains Mono(多了空格,没有 Nerd Font 后缀),字体不对当然找不到图标。

  2. 没重启终端:VSCode 不会对已经打开的终端重新加载字体,必须关闭旧终端开新终端。

  3. 装的字体不对:只装了 regular 字重没装其它字重,或者下载错了版本。建议完整下载整个字体包重装一次。


常见问题排查

问题 1:一部分图标正常,一部分还是方块

这通常是你用的字体不全,或者主题用了某些字体里没有的特定图标。换一款完整的 Nerd Font 就能解决,比如前面推荐的几款都没问题。

问题 2:我在远程连接/容器开发中遇到这个问题

这个问题和远程无关,还是本地 VSCode 终端渲染的问题,只要本地 VSCode 配置了正确字体就能解决,远程服务器上不需要安装字体。

问题 3:改了字体后英文字体变粗了不好看

可以尝试在配置里指定多个字体 fallback:

"terminal.integrated.fontFamily": "MesloLGS NF, Consolas, monospace"

这样普通字符会优先用 Consolas,图标会自动 fallback 到 MesloLGS NF。

问题 4:可以不安装 Nerd Font 吗?

理论上可以把主题里的图标都去掉不用,但那样就失去了主题美化的意义,体验会差很多。安装 Nerd Font 是一劳永逸的解决方法。


总结

解决 VSCode 终端图标乱码问题其实非常简单,核心就是两步:

  1. 在本地系统安装包含 Nerd Font 图标的字体
  2. 在 VSCode 设置中指定终端使用这个字体

只要字体名称正确,基本一次就能解决问题。如果你也遇到了这个烦人问题,照着本文步骤操作一遍,马上就能看到干净漂亮的终端啦~


好啦,感谢大家的观看,如果有疑问欢迎留言交流~

参考