Victor Mono 的 Nerd Fonts 补丁字体指南:NFM/NF/NFP 变体选择、连字特性与 font-patcher 自定义方案

原创2026-10-01 14:02:01242 阅读
文章标签:开发工具CLI

Victor Mono 的 Nerd Fonts 补丁字体指南:NFM/NF/NFP 变体选择、连字特性与 font-patcher 自定义方案

Victor Mono 是一款以半连笔草书斜体(semi-connected cursive italics)和符号连字(symbol ligatures)著称的等宽编程字体。本篇以仓库中 patched-fonts/VictorMono/Medium-Oblique/README.md 这份说明文档为主线,讲解在 Nerd Fonts 项目中如何选择 Victor Mono 的三种补丁变体(Nerd Font Mono / Nerd Font / Nerd Font Propo)、连字在不同版本与终端中的行为差异,以及「下载现成补丁字体」与「用 font-patcher 自行打补丁」两条获取路径。读完你可以快速定位适合自己的 Victor Mono 字体文件,并能用命令行按需生成只含指定图标集的定制版本。

Victor Mono 及其在仓库中的位置

Victor Mono 是一款为程序员设计的等宽字体,最鲜明的特征是半连笔的草书风格斜体与符号连字:运算符与箭头等组合会被渲染为连写字形,同时保证代码对齐的等宽节奏。上游版本为 1.5.6(文档与 fonts.json 中的 version 字段一致),属于等宽字体(isMonospaced: true),以 OFL-1.1 开源协议发布且不包含 Reserved Font Name(RFN)限制。

在仓库结构中,Victor Mono 的补丁产物集中在 patched-fonts/VictorMono 目录:每种字重与样式(Regular、Bold、Medium-Oblique、Extra-Light-Oblique 等 21 个组合)对应一个子目录,内含该样式专属的 README 与许可证;实际字体文件则统一放在父目录下,例如 Medium-Oblique 样式对应三个文件:

  • VictorMonoNerdFont-MediumOblique.ttf —— 标准 Nerd Font(NF)变体
  • VictorMonoNerdFontMono-MediumOblique.ttf —— Nerd Font Mono(NFM)变体
  • VictorMonoNerdFontPropo-MediumOblique.ttf —— Nerd Font Propo(NFP)变体

如何选择字体家族:NF、NFM 与 NFP

文档给出了一份非常直白的决策速查(TL;DR),这是选用补丁字体最核心的决策逻辑:

  • 受限等宽场景(如终端):选择带 Nerd Font Mono(缩写 NFM)的字体;
  • 想要更大的图标(通常约为普通字母的 1.5 倍宽):选择不带 Mono 的标准 Nerd Font(缩写 NF)。大多数终端支持该模式,但实际效果因人而异(ymmv);
  • 比例字体上下文(GUI 元素、演示文稿排版等):选择带 Nerd Font Propo(缩写 NFP)的字体。

三种变体本质上对应 font-patcher 的三种字形宽度处理策略,可以从 font-patcher 的命令行参数实现中得到印证:

变体 图标宽度 font-patcher 对应参数 典型用途
Nerd Font(NF) 双宽(约 1.5 个字符宽),带「overhang」 默认行为(双倍宽度) 大多数现代终端、状态栏、TUI
Nerd Font Mono(NFM) 所有字形单宽,与字符严格等宽 --mono / -s,隐含 --single-width-glyphs 严格要求等宽的终端或环境
Nerd Font Propo(NFP) 不调整前进宽度(无 overhang) --variable-width-glyphs GUI 界面、幻灯片、比例排版场景

其中 --mono(-s)在源码中被定义为「生成等宽字体,已有与新增字形均为单宽」,并注明「隐含 --single-width-glyphs」;而 --variable-width-glyphs 则明确写着「不调整前进宽度(无 overhang)(Nerd Font Propo)」。因此文件命名中的 Mono 与 Propo 后缀并非装饰,而是字形的实际度量行为差异。

连字(Ligatures)行为说明

Victor Mono 的符号连字在补丁过程中一般会被保留。但需要特别注意版本差异:

  • Nerd Fonts v2.0.0 时代,Nerd Font Mono 字体不包含连字;
  • 从 v2.1.0 起这一限制被移除,Nerd Font Mono 字体也恢复了连字。

也就是说,当前仓库中的 NFM 变体同样具备连字能力。如果你使用的终端支持连字渲染,而你又希望关闭连字,通常可以在终端自身的设置项中将其禁用,无需更换字体。

从实现层面看,连字删除是可配置的:font-patcher 通过 --removeligatures(别名 --removeligs)参数配合 --configfile 指定的配置文件,按子表(subtable)粒度移除指定连字。仓库自带的 src/config.sample.cfg 展示了完整的配置写法:

# 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"] ]

从中可以看到,连字移除可以精确到具体 lookup 子表(如 dlig 任意连字、liga 标准连字),还支持用正则匹配字体全名并配合 ! 前缀做反向过滤(如示例中对非 Italic 字体移除 liga 子表)。这对希望保留 Victor Mono 斜体连字、却移除部分标准连字的用户非常实用。

获取方式一:下载已补丁的字体(Option 1)

这是最省事的方式,适合大多数普通使用者:

  • 稳定版:从项目发布页(release)下载对应的字体压缩包;
  • 开发版:直接使用当前仓库中 patched-fonts/ 目录下的文件,即开发分支的最新产物。

以 Medium-Oblique 样式为例,按上一节的决策逻辑直接取用即可:

  • 终端场景:patched-fonts/VictorMono/VictorMonoNerdFontMono-MediumOblique.ttf
  • 大图标场景:patched-fonts/VictorMono/VictorMonoNerdFont-MediumOblique.ttf
  • 比例排版场景:patched-fonts/VictorMono/VictorMonoNerdFontPropo-MediumOblique.ttf

拿到 .ttf 后,在 Linux 上可放入 ~/.local/share/fonts 或 /usr/share/fonts 后执行 fc-cache -f 刷新字体缓存;Windows 右键选择「安装」即可。仓库还提供了 install.sh 与 install.ps1 等安装脚本,可批量安装整套补丁字体。

字体内包含哪些图标集

选择补丁字体时,值得了解其中打包了哪些图标集合。父目录 patched-fonts/VictorMono/README.md 中列出了 Victor Mono 补丁字体实际并入的图标集及其上游版本与许可证,主要包括:Codicons、Devicons、extraglyphs、Font Awesome 6.5.1、Font Awesome Extension、Font Logos、MaterialDesign、Octicons 18.3.0、Seti、Pomicons、Powerline Extra、Powerline Symbols、Power Symbols IEC、Weather Icons 等。这些图标集各自的许可证(CC BY 4.0、MIT、Apache 2.0、OFL 等)决定了衍生字体可以合规使用的范围。

获取方式二:用 font-patcher 自行打补丁(Option 2)

如果你需要定制(例如只嵌入部分图标集以缩小字体体积、或保留/移除特定连字),可以自行打补丁。仓库根目录的 font-patcher 是核心脚本,标准用法如下:

fontforge --script ./font-patcher --complete <YOUR FONT FILE>

--complete(-c)表示加入全部可用字形;更完整的参数说明可运行:

fontforge --script ./font-patcher --help

font-patcher 中通过 argparse 定义了丰富的可选参数,常用几类整理如下:

类别 参数 作用
基本 --careful 检测到已有字形时不覆盖
基本 --extension / -ext 指定输出字体类型(如 ttf、otf)
基本 --outputdir / -out 输出目录(默认当前目录)
基本 --quiet / -q 关闭详细输出
字形宽度 --mono / -s 生成 NFM 单宽字体(隐含 --single-width-glyphs)
字形宽度 --variable-width-glyphs 生成 NFP 变体(不调整前进宽度)
图标集 --complete / -c 加入全部图标集
图标集 --fontawesome、--material/--mdi、--octicons、--codicons、--powerline 等 按需只加入指定图标集
高级 --configfile 指定 INI 风格配置文件(参考 src/config.sample.cfg)
高级 --removeligatures / --removeligs 按配置文件移除连字子表(需配合 --configfile)
高级 --makegroups 选择补丁字体的命名方式(默认 1)

例如,只保留 Font Awesome 与 Powerline 图标、同时移除标准连字的定制命令大致为:

fontforge --script ./font-patcher \
  --fontawesome --powerline \
  --configfile src/config.sample.cfg --removeligatures \
  --outputdir ./out ./VictorMono-Regular.ttf

若只想验证字体命名而不真正输出文件,可使用 --dry(只检查命名、不执行补丁与存储)。补丁脚本本身采用 MIT 许可,新增图标集的作者与许可证信息可在 src/ 子目录中查阅。

许可证与合规提示

Victor Mono 补丁字体的版权声明与完整许可证位于 patched-fonts/VictorMono/LICENSE.txt:版权归 Rune Bjørnerås(2024),字体软件以 SIL Open Font License 1.1 发布。依据 fonts.json 中的元数据,其 licenseId 为 OFL-1.1-no-RFN、RFN: false,即不含保留字体名条款——这意味着在遵守 OFL 前提下,你可以自由使用、研究、修改与再分发,衍生作品也可在满足许可证要求时使用新名称。需要留意的是,补丁字体中嵌入的各图标集分别受其上游许可证约束(详见父目录 README 的图标集表格),商用或再分发前建议逐一核对。

小结

围绕 patched-fonts/VictorMono/Medium-Oblique/README.md 这份文档,要点可归纳为:Victor Mono 是一套带半连笔斜体与符号连字的等宽字体,在 Nerd Fonts 中以 NF / NFM / NFP 三种度量变体提供;终端等严格等宽场景选 NFM,追求大图标选 NF,GUI 比例排版选 NFP;连字自 v2.1.0 起在三种变体中均保留,可按需在终端关闭或通过 --removeligatures 精确移除;获取方式上既可下载现成补丁字体,也可用 fontforge --script ./font-patcher --complete 配合图标集与配置文件参数生成定制版本。

登录后查看全文
nerd-fonts