菜单

字形定义

相关源文件

介绍

本页面介绍了 Nerd Fonts 中的字形定义系统,它提供了一种结构化的方式来识别、引用和使用项目中包含的数千个图标和字形。这些定义是字体修补过程、CSS 生成和终端使用的基础。

有关 Nerd Fonts 中包含的实际图标集的信息,请参阅图标集

来源:bin/scripts/lib/README.md31-34

字形定义结构

Nerd Fonts 以两种主要格式维护字形定义

  1. JSON 映射 - 用于 Web 上下文和字体修补过程
  2. Shell 变量 - 用于终端和基于脚本的实用工具

这两种格式都将人类可读的字形名称映射到其 Unicode 码点。

来源:glyphnames.json1-3 bin/scripts/lib/i_extra.sh2-19

JSON 格式

主要的字形定义存储在 glyphnames.json 中。每个字形都有一个条目,包含:

  • 唯一标识符(例如,cod-account
  • 实际字符表示
  • 十六进制 Unicode 码点

文件中的示例

{
  "METADATA": {
    "website": "https://www.nerdfonts.com", 
    "development-website": "https://github.com/ryanoasis/nerd-fonts",
    "version": "3.3.0",
    "date": "2024-11-18 03:02:36+00:00"
  },
  "cod-account": {
    "char": "",
    "code": "eb99"
  },
  "cod-activate_breakpoints": {
    "char": "",
    "code": "ea97"
  },
  // ...many more entries
}

来源:glyphnames.json1-3

Shell 变量格式

对于终端使用,字形定义存储在名为 i_*.sh 的各种 shell 脚本文件中。每个文件对应一个特定的字形源,并为每个字形定义 shell 变量。

来自 i_extra.sh 的示例

这些 shell 变量遵循命名约定

  • 前缀 i_ 以指示其为图标
  • 来源标识符(例如,extradevcod
  • 描述性名称(例如,progress_empty_left

来源:bin/scripts/lib/i_extra.sh1-19

字形命名约定

字形标识符遵循一致的约定

  1. JSON 键source-name(例如,cod-accountdev-angular
  2. CSS 类nf-source-name(例如,nf-cod-accountnf-dev-angular
  3. Shell 变量i_source_name(例如,i_cod_accounti_dev_angular

其中

  • source 标识原始图标集(例如,cod 代表 Codicons,dev 代表 Devicons)
  • name 是字形的描述性名称

这种一致的命名方式便于在不同格式之间进行交叉引用。

来源:css/nerd-fonts-generated.css29-43 bin/scripts/lib/i_extra.sh7-18

字形来源

Nerd Fonts 聚合了来自多个来源的图标。每个来源都有其对应的定义文件

字形来源字体文件定义文件
Codiconscodicons/codicon.ttfi_cod.sh
Deviconsdevicons.ttfi_dev.sh
Font Awesomefont-awesome/FontAwesome.otfi_fa.sh
Font Awesome Extensionfont-awesome-extension.ttfi_fae.sh
IEC 电源符号Unicode_IEC_symbol_font.otfi_iec.sh
字体标志font-logos.ttfi_logos.sh
Material Design 图标materialdesign/MaterialDesignIconsDesktop.ttfi_md.sh
Octiconsocticons.ttfi_oct.sh
Powerline 额外符号PowerlineExtraSymbols.otfi_ple.sh
PomiconsPomicons.otfi_pom.sh
SETI UIoriginal-source.otfi_seti.sh
天气图标weather-icons/weathericons-regular-webfont.ttfi_weather.sh
额外字形extraglyphs.sfdi_extra.sh

注意:Material Design Icons(i_material.sh)已在 Nerd Fonts v3 中移除。

来源:bin/scripts/lib/README.md36-50

字形定义系统

下图说明了字形定义如何集成到更广泛的 Nerd Fonts 系统中

来源:bin/scripts/lib/i_all.sh1-28 bin/scripts/lib/README.md31-50 glyphnames.json1-3

在 CSS 中的使用

字形定义用于生成 CSS 文件,使 Web 应用程序能够显示 Nerd Fonts 图标。这是通过与每个字形对应的 CSS 类来实现的

要在 HTML 中使用这些

CSS 文件提供了三种可用的类前缀

  • .nf-(后跟图标名称)
  • .nf(基础类,必须与图标类结合使用)
  • .nerd-font.nerd-fonts(替代基础类)

来源:css/nerd-fonts-generated.css16-27 css/nerd-fonts-generated.min.css7

在终端脚本中的使用

shell 变量定义允许在终端脚本中轻松使用图标

这对于创建视觉增强的终端应用程序和状态栏特别有用。

来源:bin/scripts/lib/i_all.sh16-26 bin/scripts/lib/i_extra.sh7-18

字形定义流程

下图展示了从字形定义到使用的流程

来源:bin/scripts/lib/README.md31-50 glyphnames.json1-3

结论

字形定义构成了 Nerd Fonts 系统的核心,提供了一种标准化方式,可在不同上下文中使用和引用数千个图标。通过以 JSON 和 shell 变量格式维护定义,Nerd Fonts 确保了与 Web 应用程序、终端实用工具以及字体修补过程本身的兼容性。

这些定义允许用户使用跨不同环境的一致命名约定,轻松地将图标整合到其应用程序、终端配置和自定义脚本中。