字体主要后缀
- code: 代码特殊优化字体
- nf: nerd font 字体
- mono(monospace):等宽字体
字体编码与字体组合
字体主要为unicode编码,空间大有预留空间,因此单个字体可以组合不同的语言进来, 而且上诉后缀里,code是对英文字符做了优化,mono是等宽字体,需要英文字体支持,一般带code的都是等宽字体。nf是nerd font,是一种特殊的字体,里面有大量的图标,是unicode字体未定义区间的扩充,相当于添加了“新的语言”进来
总结:
字体优选:
- 日常+开发:选择mono + nf后缀字体,根据需要选择带code的等宽字体
- 日常使用选择mono字体,根据需要选择带code的字体,nf后缀作为可选项
- 对以上没有要求选择心仪字体即可。
Q: 不带nf后缀但是有nf里图标的字体是如何实现的,内部是否有完整的nf图标集?
A: 不带nf但是又nf图标的是该字体对使用场景添加了常用的nf图标集进来,内部不一定有完整的nf图标集,但一般都有大量的图标,可以满足日常使用。偶尔会使用powerful作为字体后缀。
Q: 字体的粗细,出现在后缀里有何作用,如何选?
A: 字体粗细主要影响的是字体的显示效果,一般有细体、中粗、粗体三种粗细,选择哪种粗细,视个人喜好而定。一般日用选择regular粗细,代码优化选择bold粗细。
以下是来自deepseek对字体后缀的解释
Q: 字体后缀里面,mono,nerd,code都有什么作用,等宽字体又是什么
核心基础:等宽字体
- 是什么? 等宽字体是指字体中每个字符(字母、数字、符号)都具有相同的水平宽度。例如,窄的字母
i
和宽的字母m
在屏幕上占据的宽度是完全一样的。 - 作用与重要性:
- 垂直对齐: 这是等宽字体最重要的特性。它确保代码的缩进、列数据(如表格、日志文件)、注释等能够完美地对齐,极大地提高了代码的可读性和结构清晰度。
- 字符位置可预测: 光标移动到第几行第几列的位置是精确的,方便定位和编辑。
- 传统兼容性: 早期的计算机终端和打印机都是基于等宽字符设计的,很多命令行工具和界面也依赖于此。
- 减少歧义: 在特定场景下(如区分
1
,l
,I
或0
,O
),设计良好的等宽字体会刻意增加这些字符的差异度。
- 常见例子:
Courier New
,Consolas
,Menlo
,Monaco
,DejaVu Sans Mono
,Source Code Pro
,Fira Code
,JetBrains Mono
等等。
字体后缀的含义与作用
现在来看你提到的后缀,它们通常都是附加在等宽字体名称后面,表示该字体在基础等宽特性之上,还提供了特定的增强功能:
Mono
- 含义: 是
Monospace
的缩写。 - 作用: 最直接地表明这是一款等宽字体。 这是最基础、最重要的标识。
- 例子:
Fira Mono
,Ubuntu Mono
,Roboto Mono
,DejaVu Sans Mono
,Droid Sans Mono
。 - 总结: 看到
Mono
,你就知道这个字体是等宽的,适合写代码或用于终端。
- 含义: 是
Nerd
(通常来自 Nerd Fonts 项目)- 含义: 表示该字体集成了大量额外的图标字形。
- 作用:
- 解决图标显示问题: 许多终端工具、Shell提示符、文件管理器插件等会使用特殊的符号来表示状态(如Git分支状态
、文件类型图标 、编程语言标志 、电源符号 等)。如果你的系统字体不支持这些符号,它们就会显示为乱码(如?
或方块□
)。 - 统一图标体验: Nerd Fonts 项目收集了多个流行的图标集,将它们修补到现有的优秀等宽字体中,并确保这些图标也保持等宽,不会破坏对齐。
- 丰富终端/编辑器UI: 让命令行界面和代码编辑器看起来更美观、信息更丰富直观。
- 解决图标显示问题: 许多终端工具、Shell提示符、文件管理器插件等会使用特殊的符号来表示状态(如Git分支状态
- 关键点:
- Nerd Fonts 本身不是一个新设计的字体,而是对现有字体的补丁。
- 它依赖于基础字体是等宽的,打补丁后会保持等宽特性。
- 后缀
Nerd
或NF
表示该字体版本已经应用了 Nerd Fonts 补丁。
- 例子: 几乎所有流行的编程等宽字体都有对应的 Nerd Font 版本:
FiraCode Nerd Font
/FiraCode NF
JetBrainsMono Nerd Font
/JetBrainsMono NF
DejaVuSansMono Nerd Font
/DejaVuSansMono NF
MesloLGS NF
(基于Apple的Menlo)Hack Nerd Font
/Hack NF
CaskaydiaCove Nerd Font
(原Cascadia Code NF
)
- 总结: 看到
Nerd
或NF
,就知道这个字体在保持等宽的同时,额外包含了海量图标,能完美显示各种工具的特殊符号,是美化终端和编辑器的利器。它必须建立在Mono
或Code
字体之上。
Code
- 含义: 表示该字体是专门为编程和代码编辑优化设计的等宽字体。
- 作用 (在基础等宽之上):
- 连字: 这是
Code
字体最著名的特性。它会将某些连续的字符组合(如!=
,===
,->
,=>
,/*
,//
等)渲染成一个更符合数学符号或自然阅读习惯的单一字形。例如!=
可能显示为≠
,->
显示为→
。这纯粹是视觉上的美化,文件里存储的还是原始的字符。 - 增强的字符区分度: 特别注重易混淆字符的设计,让
0
(零)、O
(大写O)、o
(小写o)、1
(一)、l
(小写L)、I
(大写i)、{}[]()/|\
等看起来差异更明显。 - 优化的标点符号: 括号、引号、分号、逗号等的形状和间距可能经过调整,在代码上下文中更清晰。
- 平衡的字形间距和比例: 在保证等宽的前提下,优化字母内部的空白和整体比例,提高长时间阅读代码的舒适度。
- 连字: 这是
- 例子:
Fira Code
,JetBrains Mono
,Cascadia Code
,Victor Mono
,Hasklig
(基于Source Code Pro),Monoid
。 - 总结: 看到
Code
,就知道这是一款进阶版的、为程序员精心优化过的等宽字体,通常包含连字等特性,提供更愉悦、更易读的编码体验。它本质上也是Mono
,但功能更强大。
总结与关系
Mono
是基础: 标识等宽属性,是编程和终端显示的刚需。Code
是增强: 在Mono
基础上,专门为编程优化(连字、字符区分度等),提供更好的开发体验。Code
字体必然是等宽的(Mono
)。Nerd
/NF
是扩展: 在Mono
或Code
字体基础上,打补丁加入海量图标集,解决终端/编辑器特殊符号显示问题。它依赖于基础字体是等宽的。- 组合使用: 最理想的选择通常是
[基础字体名] + [可选Code] + Nerd Font
,例如JetBrainsMono Nerd Font
(基础是JetBrains Mono
,它自带Code
优化) 或FiraCode Nerd Font
。这样你就同时获得了:- 等宽对齐 (
Mono
) - 编程优化特性 (
Code
) - 海量图标支持 (
Nerd Font
)
- 等宽对齐 (
简单决策:
- 需要写代码或用终端? -> 选带
Mono
后缀的字体。 - 想代码看起来更漂亮、更易读? -> 优先选带
Code
后缀的字体。 - 不想看到终端/编辑器里的图标变成乱码? -> 选打了
Nerd Font
补丁的字体版本 (通常是[字体名] Nerd Font
或[字体名] NF
)。
所以,下次看到字体名中的这些后缀,你就知道它们分别代表什么价值了!选择时根据自己的需求(基础对齐、编程优化、图标支持)来组合即可。
Q:上述举例中,提到了ubuntu mono字体,名称中未提到添加了nerd fonts patch,并且ubuntu mono项目内有单独的带nf后缀的字体,为什么在实际使用时,两款字体对图标字符的显示效果一样?
这是一个非常敏锐的观察!你遇到的情况揭示了字体生态系统中一个有趣的细节,也说明了 Nerd Fonts 项目的核心工作原理。原因主要在于 Unicode 的私有使用区 和 字体如何定义字形。
让我们一步步分析为什么 Ubuntu Mono
和 Ubuntu Mono NF
可能在某些图标上显示效果一样:
Unicode 的私有使用区:
- Unicode 标准为世界上绝大多数字符分配了唯一的码点。
- 然而,Unicode 预留了三个区域,称为 私有使用区,范围是:
U+E000
-U+F8FF
(基本多文种平面 - PUA)U+F0000
-U+FFFFD
(补充私有使用区-A)U+100000
-U+10FFFD
(补充私有使用区-B)
- 这些区域 没有 被 Unicode 联盟分配给任何标准字符。它们的意义完全由字体开发者、软件开发者或特定社区 自行定义。
Nerd Fonts 如何工作:
- Nerd Fonts 项目的核心就是将各种流行图标集(如 Font Awesome, Material Design Icons, Octicons, Powerline Symbols 等)中的图标,“映射”到 Unicode 的 私有使用区 码点上。
- 它修改现有的等宽字体文件,在字体中添加这些额外的字形,并将它们放置在 PUA 的特定码点上。
- Nerd Fonts 社区定义了一套 约定俗成的映射关系。例如,特定的 Git 分支图标
可能总是被放在U+E0A0
这个 PUA 码点上。
Ubuntu Mono
官方字体可能做了什么:- Canonical (Ubuntu 的母公司) 在开发
Ubuntu Mono
时,可能直接在其官方发布的字体文件中,也包含了一些常用的、在开发者社区流行的图标,特别是那些与 Powerline 提示符 密切相关的图标。 - 为什么这么做? Powerline 是一个非常流行的状态栏美化工具,很多 Ubuntu/Linux 用户喜欢用它来定制 shell 提示符 (如
bash
,zsh
)。为了让 Powerline 能在默认的 Ubuntu Mono 字体下正确显示其特有的箭头分隔符等图标,Canonical 选择将这些特定图标直接内置到Ubuntu Mono
中。 - 它们放在哪里? Canonical 很可能遵循了与 Powerline 和早期 Nerd Fonts 相同的约定,将这些图标放在了 相同的 PUA 码点 上(例如
U+E0B0
是 Powerline 右箭头
的常见位置)。这确保了兼容性。 - 范围有限: 官方
Ubuntu Mono
不会包含 Nerd Fonts 的全部海量图标集(可能有几千个)。它可能只包含了 Powerline 核心图标和一些最常用的开发相关图标(比如基本的 Git 状态符号
等)。
- Canonical (Ubuntu 的母公司) 在开发
Ubuntu Mono Nerd Font
做了什么:- 这是由 Nerd Fonts 社区维护的项目。它以官方
Ubuntu Mono
字体为基础。 - 然后,它应用 Nerd Fonts 的 补丁脚本。
- 这个补丁脚本会做两件事:
- 添加缺失的图标: 将 Nerd Fonts 支持的所有图标集(远远超出官方 Ubuntu Mono 包含的)添加到字体文件中,同样放在 PUA 码点上。
- 确保一致性: 对于官方
Ubuntu Mono
已经包含的图标(如 Powerline 图标),补丁脚本通常不会覆盖或修改它们,因为这些字形已经存在且位置正确。它只是添加新的。
- 这是由 Nerd Fonts 社区维护的项目。它以官方
为什么显示效果可能一样?
- 关键点:相同的 PUA 码点映射!
- 当你使用一个需要显示特定图标的工具(比如一个配置了 Powerline 主题或 Nerd Fonts 图标的 shell 提示符、文件管理器插件、代码编辑器插件)时,这个工具会尝试输出一个特定的 Unicode 码点(比如
U+E0B0
代表右箭头)。 - 如果你的系统安装了
Ubuntu Mono
:- 这个字体文件本身在
U+E0B0
位置已经定义了一个右箭头字形(由 Canonical 官方添加)。 - 所以工具调用
U+E0B0
,Ubuntu Mono
就能显示对应的右箭头。
- 这个字体文件本身在
- 如果你的系统安装了
Ubuntu Mono Nerd Font
:- 这个字体文件在
U+E0B0
位置同样定义了一个右箭头字形。这个字形要么是原封不动继承自官方Ubuntu Mono
,要么是由 Nerd Fonts 补丁添加的一个视觉风格高度相似甚至相同的字形(为了保持整体一致性)。 - 所以工具调用
U+E0B0
,Ubuntu Mono NF
也能显示一个看起来一样的右箭头。
- 这个字体文件在
- 结论: 对于 那些被官方
Ubuntu Mono
包含且与 Nerd Fonts 映射到相同 PUA 码点的图标,两款字体在显示这些特定图标时,效果看起来就会一样。因为它们都在同一个“地址”(码点)定义了相同或相似形状的“房子”(字形)。
总结与关键区别:
覆盖范围不同:
Ubuntu Mono
(官方): 只包含有限的、精选的图标,主要是为了支持 Powerline 和极常用开发符号。图标数量少。Ubuntu Mono Nerd Font
: 包含 Nerd Fonts 项目的完整图标集,数量庞大(数千个),覆盖各种图标库和符号。这是它的核心价值。
维护者不同:
Ubuntu Mono
(官方): 由 Canonical 维护和发布,作为 Ubuntu 系统的一部分。Ubuntu Mono Nerd Font
: 由 Nerd Fonts 社区维护,基于官方字体打补丁后发布。
何时需要
NF
版本?- 如果你只需要显示 Powerline 箭头和最基础的 Git 状态符号,并且你使用的是 Ubuntu 系统或只安装了官方的
Ubuntu Mono
字体,那么它很可能就能满足需求,效果和NF
版本在这些特定图标上一样。 - 如果你需要显示 更丰富的图标,比如:
- 各种文件类型图标 ( 文本, 文件夹, 图片, PDF, 配置文件等)
- 编程语言标志 ( JS, TS, JSON, Rust, Go, CSS, HTML 等)
- 更详细的 Git 状态 ( 提交, 仓库, 拉取请求, 警告, 错误等)
- 设备图标 ( 服务器, 游戏机, Wi-Fi 等)
- 天气图标 ( 晴, 风, 雨等)
- …以及其他海量图标
- 那么 官方
Ubuntu Mono
就无能为力了,因为它不包含这些额外的字形定义。这时你就必须安装并使用Ubuntu Mono Nerd Font
(或UbuntuMono NF
) 才能正确显示这些图标,避免出现问号?
或方块□
。
- 如果你只需要显示 Powerline 箭头和最基础的 Git 状态符号,并且你使用的是 Ubuntu 系统或只安装了官方的
简单来说:
Ubuntu Mono
官方版包含了一些“基础套餐”图标(主要是 Powerline)。Ubuntu Mono Nerd Font
包含了“超级全家桶”图标。- 对于“基础套餐”里的图标,两者都提供,并且放在相同的“位置”(PUA 码点),所以看起来一样。
- 想要“超级全家桶”里的其他图标,只能靠
NF
版本。
因此,你观察到部分图标显示效果一样是完全正常的,这得益于官方字体对部分社区约定的采纳。但 NF
版本的价值在于它提供了极其全面的图标支持。