Nerd Fonts 中 JetBrains Mono NoLigatures ExtraBold 变体完整使用指南:字体选择、连字处理与安装实战

原创2026-09-30 14:37:571,235 阅读
文章标签:开发工具CLI

Nerd Fonts 中 JetBrains Mono NoLigatures ExtraBold 变体完整使用指南:字体选择、连字处理与安装实战

本篇技术指南聚焦 Nerd Fonts 仓库内 JetBrainsMono 系列中 NoLigatures/ExtraBold 变体,讲解在终端、编辑器与 GUI 场景下如何正确选择 Nerd Font / Nerd Font Mono / Nerd Font Propo 三种字体家族,剖析 NoLigatures 版本与连字(Ligature)处理的内在机制,并给出从官方发布包下载、使用 font-patcher 自修补、以及通过 install.sh 安装的完整可操作方案。阅读完成后,你将能够依据实际使用场景精准选用 JetBrains Mono 的 Nerd Fonts 变体,并理解 NoLigatures 字体在仓库中的生成原理。

字体与变体概览

JetBrains Mono 是 JetBrains 推出的专为开发者设计的等宽字体,在 Nerd Fonts 项目中它被完整整合进 patched-fonts 目录,当前补丁版本为 2.304。在 patched-fonts/JetBrainsMono/ 下,字体按两个维度组织:

  • Ligatures / NoLigatures 两套并排目录:带连字版本在 Ligatures/ 下,不带连字版本在 NoLigatures/ 下;
  • 每套目录内按字重细分:Bold、BoldItalic、ExtraBold、ExtraBoldItalic、ExtraLight、ExtraLightItalic、Italic、Light、LightItalic、Medium、MediumItalic、Regular、SemiBold、SemiBoldItalic、Thin、ThinItalic 共 16 个字重样式。

以本文主题的 NoLigatures/ExtraBold 为例,其目录 ExtraBold/ 中存放了三种命名后缀的 TTF 文件(文件名中的 NL 即 No Ligatures 的缩写):

  • JetBrainsMonoNLNerdFont-ExtraBold.ttf —— 标准 Nerd Font 变体;
  • JetBrainsMonoNLNerdFontMono-ExtraBold.ttf —— Nerd Font Mono 变体(单宽图标);
  • JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf —— Nerd Font Propo 变体(比例图标)。

三个文件与 OFL.txt(SIL Open Font License 许可证)及本 README 一起构成该字重完整可用的发布单元。ExtraBold 是字重较重的样式,适合代码高亮、标题、终端中需要强调输出的场景。

三大家族怎么选:NF、NFM、NFP

原文档用 "TL;DR" 给出了最直接的选字决策依据,这里结合上述实际文件逐一展开:

需求场景 选择 文件名后缀示例 图标宽度特征
受限等宽环境(传统终端等) Nerd Font Mono(NFM) ...NerdFontMono-ExtraBold.ttf 单字宽图标,与字母等宽对齐
希望图标更大更醒目(多数现代终端都支持) Nerd Font(NF) ...NerdFont-ExtraBold.ttf 图标约 1.5 个普通字母宽
比例排版环境(GUI 组件、演示文稿等) Nerd Font Propo(NFP) ...NerdFontPropo-ExtraBold.ttf 图标采用比例宽度,融入文本流

选字遵循两步:先定字体家族与字重(如 JetBrains Mono ExtraBold),再定图标变体(NF / NFM / NFP)。需要注意,NF 与 NFP 的图标较宽,个别终端渲染等宽字体时可能出现对齐异常,因此"Most terminals support this, but ymmv"(多数终端支持,但需自行验证)。在不知道选哪个时,建议先试 NF 变体,若出现光标偏移或对齐问题再切换到 NFM。

连字处理专题:NoLigatures 版本的来龙去脉

仓库中的连字策略

Nerd Fonts 对连字的基本策略是:修补后的字体默认保留连字。作为例外,NoLigatures 目录下的字体(文件名带 NL)专门移除了连字表。JetBrains Mono 本身以丰富的编程连字(=>、->、!= 等)著称,因此在需要严格逐字符等宽、或终端对连字支持不佳的场景,可直接使用 NoLigatures 版本。

历史上 Nerd Fonts v2.0.0 曾在 Nerd Font Mono 字体中移除连字,该行为自 v2.1.0 起被取消——也就是说,现在即使是 Mono 变体也会保留连字。如果使用的是支持连字的终端却不想要连字,通常可以在终端设置里关闭连字选项,无需更换字体文件。

如何用 font-patcher 生成自己的无连字字体

除了直接下载 NoLigatures 成品,也可以对任意原字体自行移除连字。仓库提供了配置文件样例 src/config.sample.cfg,其 [Config] 段明确给出了无连字修补的推荐参数:

# These config files are read by the font-patcher
# They are INI style files, but some keys have JSON values
[Config]
commandline: --removeligatures --makegroups 2
abort-mono-patch: True
[Subtables]
# List of either
# - a simple string (of the subtable to be removed)
# - a 2 element list consisting of regex on font fullname and subtable name
#   the regex can be prepended with '!' to invert it
ligatures: [
        "'dlig' Discretionary Ligatures lookup 12 contextual 0",
        "'dlig' Discretionary Ligatures lookup 11 subtable",
        "'dlig' Discretionary Ligatures lookup 9 subtable",
        ["!Italic", "'liga' Standard Ligatures in Latin lookup 6 subtable"] ]

使用方式为:先通过 --configfile 指定该配置文件,同时传入 --removeligs(其别名 --removeligatures)开关。在 font-patcher 的参数定义中可以看到:

'--removeligs', '--removeligatures', dest='removeligatures', default=False,
action='store_true', help='Removes ligatures specified in configuration file (needs --configfile)'

即该开关需要配合 --configfile 使用。

底层实现原理

从源码看,remove_ligatures 方法 是连字移除的核心:

  • 读取配置 Subtables 段的 ligatures 列表(JSON 格式);
  • 列表项分两类:简单字符串(直接作为要删除的 GSUB 子表名)和 两元素复合项([正则, 子表名],正则匹配字体 fullname,决定是否对该字体执行删除);
  • 复合项的正则若以 ! 开头表示取反——例如样例中的 ["!Italic", "'liga' ..."] 表示除 Italic 样式外的所有字体都删除标准连字子表;
  • 对选中的子表调用 FontForge 的 removeLookupSubtable 执行删除。

这解释了 NoLigatures 版本的技术来源:JetBrainsMonoNLNerdFont-* 等文件正是通过该机制在修补时移除了 dlig(可选连字)与 liga(标准连字)子表。该方法的设计初衷(见源码注释)是处理等宽字体中被压缩成单格的 fi 连字及 ldot 等,保证严格等宽环境下字符间距一致。

获取已修补字体:两种路径

路径一:直接下载成品

  • 稳定版:从项目的 release 页面下载字体包(JetBrainsMono 有独立的 .zip 与体积更小的 .tar.xz 打包,包含全部 Ligatures / NoLigatures 与 NF / NFM / NFP 变体);
  • 开发版:直接从本仓库 patched-fonts/JetBrainsMono/ 目录取用单个 TTF 文件。

路径二:自行修补

对已有原字体运行 font-patcher,可获得发布包之外的自定义组合,例如:

  • 只打入部分图标集,以减小字体体积(对应 --fontawesome、--octicons、--material 等按需开关,各图标集定义见 font-patcher);
  • 调整垂直度量以适配特殊终端(--metrics);
  • 按上文方式移除连字(--removeligatures + --configfile)。

安装到系统并验证

仓库根目录提供跨平台安装脚本 install.sh,可直接安装 JetBrains Mono NoLigatures 的指定变体:

# 仅安装 NoLigatures 目录下的 JetBrains Mono
./install.sh JetBrainsMono/NoLigatures

# 只看会安装哪些文件(dry run)
./install.sh --list JetBrainsMono/NoLigatures

# 安装单宽图标变体(NerdFontMono 系列)
./install.sh --mono JetBrainsMono/NoLigatures

# 安装比例图标变体(NerdFontPropo 系列)
./install.sh --use-proportional-glyphs JetBrainsMono/NoLigatures

脚本行为要点(结合 install.sh 源码):

  • 默认以 copy 模式安装到用户字体目录:Linux 下为 $HOME/.local/share/fonts/NerdFonts(尊重 XDG_DATA_HOME),macOS 下为 $HOME/Library/Fonts;--install-to-system-path 则安装到系统目录(Linux 为 /usr/local/share/fonts/NerdFonts,需 root 权限);
  • --mono(-s)与 --use-proportional-glyphs(-p)对应源码中 variant 参数的 M / P 两种过滤模式,分别只收集 *NerdFontMono* 与 *NerdFontPropo* 文件;默认变体则排除 Mono/Propo 只装标准 Nerd Font;
  • --link 以符号链接方式安装(不复制文件),--clean 会先清空旧的 NerdFonts 目标目录,--remove 可卸载已安装的字体;
  • 安装完成后脚本会自动执行 fc-cache -vf 刷新 Linux 字体缓存。

安装后可在支持字体设置的终端中直接选用 JetBrainsMonoNLNerdFont ExtraBold(或其 Mono/Propo 变体)作为默认字体,并通过输入 nf 相关图标的提示符验证图标是否正常渲染。若遇到图标宽度错位,可退回 NFM 变体,或按上文所述在终端中关闭连字。

许可证说明

JetBrains Mono 以 SIL Open Font License 授权,NoLigatures/ExtraBold 目录内的 OFL.txt 即为随包许可证文件;修改版字体未使用上游保留字体名(RFN 机制),符合 src/readme-rfn-addendum.md 中关于避免命名冲突的约定。分发或商用该字体时请保留许可证文本。

登录后查看全文
nerd-fonts