终端图标显示为方块或问号,本质是terminal.integrated.fontfamily未加载nerd font等支持pua图标的等宽字体;需安装cascadia code pl等补丁字体,正确配置字体链,重启终端进程,并确保locale为utf-8。

终端图标显示为方块或问号,本质是字体不支持连字或 Nerd Font 图标集
VSCode 集成终端里 ls、git status 或 Oh My Zsh 主题中的图标(如 ?、、)显示为方块、问号或空格,不是编码问题,而是当前 terminal.integrated.fontFamily 没加载带图标的等宽字体。默认的 Consolas、Fira Code(非 Nerd 版)本身不含这些私有 Unicode 区域(PUA)符号。
- 必须使用已打过补丁的 Nerd Font,比如
Cascadia Code PL、JetBrainsMono Nerd Font、MesloLGS NF,不能只写Cascadia Code - Windows 用户推荐优先试
Cascadia Code PL(微软官方维护,原生含中文+图标,无需额外配中文字体) - macOS/Linux 用户注意:字体名必须拼写完全一致,
PingFang SC有效,苹方无效;Noto Sans CJK SC要带空格和SC后缀 - 配置时用单引号包裹每个字体名,逗号后加空格,例如:
'Cascadia Code PL', 'Microsoft YaHei', 'monospace'
terminal.integrated.fontFamily 配置后图标仍不显示?检查是否关掉了旧终端进程
VSCode 不会热更新终端字体——改完设置后,必须关闭所有已打开的终端页签(Ctrl+Shift+` 打开的每一个),再按 Ctrl+Shift+` 新建一个。只点「×」关掉当前页签、或 reload 窗口,旧进程的字体缓存仍在,图标不会刷新。
- 验证是否生效:新开终端后运行
echo ""(复制这个字符粘贴执行),若显示为图标而非方块,说明字体加载成功 - 如果只在部分命令(如
ls -la)里图标异常,可能是该命令本身未启用图标支持(如ls需搭配lsd或exa,git需配git config --global status.showUntrackedFiles no等) - PowerShell 用户额外注意:
$OutputEncoding设错会导致图标字节被截断,即使字体对也显示为空——务必确认[Console]::OutputEncoding返回的是System.Text.UTF8Encoding
Windows 下 Cascadia Code PL 安装后 VSCode 还找不到字体?路径或注册表没刷进系统
VSCode 读取的是系统级字体列表,不是文件路径。下载 CascadiaCode-PL.ttf 后双击安装,必须点「安装」按钮(不是「预览」),并确保 Windows 字体文件夹(C:\Windows\Fonts)里真有对应文件。有时右键「为所有用户安装」更可靠。
- 安装后可打开「字体设置」→ 搜索
Cascadia,确认「Cascadia Code PL」条目存在且状态为「已安装」 - 若仍不识别,重启 Windows 资源管理器(任务管理器 → 重启
explorer.exe)或直接重启系统 - 不要在
terminal.integrated.fontFamily里写绝对路径,VSCode 不支持;只写字体全名
Linux/macOS 终端图标乱码,别漏了 locale 和 shell 配置
字体对了但图标还是乱,大概率是 shell 启动时 locale 未设 UTF-8,导致终端底层把图标字节当非法序列丢弃。尤其 WSL、iTerm2、Alacritty 等外部终端复用到 VSCode 时更明显。
- 先在 VSCode 终端里运行
locale,确认LANG是zh_CN.UTF-8或en_US.UTF-8,不是C或空 - 若不对,在
settings.json中补环境变量:"terminal.integrated.env.linux": {"LANG": "zh_CN.UTF-8"}(macOS 对应osx) - Zsh 用户检查
~/.zshrc是否覆盖了LANG,常见错误是写了export LANG=C—— 这会直接禁用所有 UTF-8 图标输出 - Git Bash 用户需在安装时勾选「Use Windows' default console code page」取消,否则强制走 GBK,图标必炸











