本页面概述了 Fira Code 的关键排版和编程特定功能,这些功能使其独具特色。它涵盖了连字、字符变体、样式集以及字体中提供的其他 OpenType 功能。有关特定连字实现的详细信息,请参阅连字与编程符号。有关如何在不同环境中启用这些功能的说明,请参阅安装与使用。
Fira Code 是一款专为编程设计的等宽字体,包含多项独特功能。
来源:README.md1-63 FiraCode.glyphs593-653
Fira Code 最显著的特点是其编程连字。这些连字将常见的多个字符组合在视觉上合并为单个逻辑标记,使代码更易于阅读,同时保留了底层的 ASCII 文本。
Fira Code 包含十多种类别的 100 多个连字。
| 类别 | 示例 | 目的 |
|---|---|---|
| 相等运算符 | == === != !== | 提高比较操作的可读性 |
| 箭头运算符 | -> => <- <= | 在函数类型和操作中清晰地显示方向 |
| 比较运算符 | <= >= <> | 使比较更清晰 |
| 赋值运算符 | := =:= <- | 区分不同的赋值类型 |
| 逻辑运算符 | && || | 使逻辑运算更突出 |
| 标点符号序列 | :: ... .. | 提高分隔符和范围的可读性 |
| 数学运算符 | /= *> <* | 使数学运算更清晰 |
Fira Code 4.0+ 的一项关键功能是组合箭头系统,允许构建任意长度的箭头。
| 基础 | 组合示例 |
|---|---|
- 为基础 | --> <-- <--> 及更长变体 |
= 为基础 | ==> <== <==> 及更长变体 |
~ 为基础 | ~> <~ <~> 及更长变体 |
来源:README.md7-17 README.md29-45 CHANGELOG.md97-101
Fira Code 通过 OpenType 字符变体(cv01-cv32)为许多字符提供了多种替代设计。这允许在不更改字体的情况下自定义字体外观。
以下是可用字符变体的一些示例。
| 字符 | 变体 | OpenType 功能 |
|---|---|---|
| a | 标准和替代 | cv01 |
| g | 标准和替代 | cv02 |
| i | 四种不同样式 | cv03-cv06 |
| l | 四种不同样式 | cv07-cv10 |
| 0 | 带斜杠和圆点,不带斜杠和圆点 | cv11-cv13 |
| 3 | 标准和替代 | cv14 |
| * | 居中对齐和顶部对齐,六边形 | cv15-cv16 |
| ~ | 标准和顶部对齐 | cv17 |
| % | 标准和替代 | cv18 |
| <= | 不同样式 | cv19-cv20 |
| {} | 标准和替代 | cv29 |
| | | 标准和长形 | cv30 |
来源:README.md43-49 CHANGELOG.md44-67
样式集是可以一起启用的替代字符设计组。Fira Code 包含 10 个样式集(ss01-ss10)。
一些值得注意的样式集
<=, >=)设计来源:README.md43-49 CHANGELOG.md44-67 CHANGELOG.md185-197
Fira Code 通过 OpenType 功能的组合来实现多种标准功能,这些功能控制着字体渲染的各个方面。
Fira Code 中的主要 OpenType 功能包括:
| 功能 | 标签 | 描述 |
|---|---|---|
| 上下文交替 | calt | 编程连字的主要机制 |
| 标准连字 | liga | 传统的文本连字(默认禁用) |
| 斜零 | zero | 为零字符应用斜线形式 |
| 旧式数字 | onum | 将数字形状改为不同高度 |
| 区分大小写形式 | case | 调整标点符号以适应全大写文本 |
| 样式集 | ss01-ss10 | 样式替代组 |
| 字符变体 | cv01-cv32 | 单个字符替代 |
calt 功能尤为重要,因为它支持 Fira Code 的大部分编程连字。它会分析字符序列,并根据周围字符的上下文应用连字。
来源:FiraCode.glyphs593-653 FiraCode.glyphs954-959
Fira Code 为编程、数学和终端界面中常用的特殊符号提供了广泛的支持。
Fira Code 对 ASCII/框线绘制字符有极佳的支持,使其成为终端和控制台界面的理想选择。
┌───────────────────┐
│ Box drawing demo │
├───────────────────┤
│ ╔═══╗ ┏━━━┓ ┏━━━┓ │
│ ║ ║ ┃ ┃ ┣━━━┫ │
│ ╚═══╝ ┗━━━┛ ┗━━━┛ │
└───────────────────┘
Fira Code 是第一个为渲染进度条提供专用字形的编程字体。
[■■■■■■■■··] 80%
[■■■·······] 30%
[■■■■■■····] 60%
该字体包含全面的 Unicode 覆盖,用于数学书写。
| 类别 | 示例 |
|---|---|
| 逻辑符号 | ∀ ∃ ∄ ∅ ∈ ∉ ∧ ∨ |
| 集合运算 | ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ∪ ∩ |
| 比较 | ≡ ≢ ≤ ≥ ≈ ≠ |
| 箭头 | → ← ⇒ ⇐ ↑ ↓ ↔ ⇔ |
| 杂项 | ∑ ∏ ∞ ∇ ∂ √ ∫ |
来源:README.md50-67 CHANGELOG.md117-125 CHANGELOG.md138-181
Fira Code 的功能是通过字形设计和 OpenType 功能编程的组合来实现的。了解这些功能的实现方式有助于进行故障排除和自定义。
Fira Code 中的连字主要通过 calt(上下文交替)OpenType 功能来实现。该实现使用复杂的替换规则,以确保连字在适当的上下文中应用,并且不会引起混淆。
例如,箭头连字系统使用一系列查找来将字符组合成任意长度的箭头。
lookup equal_arrows {
# Disable |||
ignore sub bar bar' bar equal;
ignore sub bar bar' equal;
ignore sub [equal_start.seq equal_middle.seq] bar' bar bar;
# equal middle & end
sub [less_equal_start.seq ...] equal' [equal less greater ...] by equal_middle.seq;
...
}
此查找是允许组合箭头构造的复杂系统的一部分,该系统已在 Fira Code 4.0 中引入。
来源:FiraCode.glyphs966-1779 CHANGELOG.md93-103
字符变体和样式集作为单独的 OpenType 功能(cv01-cv32 和 ss01-ss10)实现。这些功能执行从一个字形到另一个替代设计的简单替换。
在 OpenType 功能代码中,这些定义了简单的替换规则。
# Example of a character variant (cv01 - alternative 'a')
sub a by a.cv01;
# Example of a stylistic set (ss01 - alternative 'r')
sub r by r.ss01;
来源: FiraCode.glyphs620-649 CHANGELOG.md44-67
Fira Code 的功能随时间不断发展。主要里程碑包括
| 版本 | 关键功能添加 |
|---|---|
| 7.0 | 错误修复和维护 |
| 6.0 | 新增 Unicode 字符,修订了变体系统 |
| 5.0 | 垂直对齐符号,新增数学字符 |
| 4.0 | 组合箭头系统,无限箭头组合 |
| 3.0 | 数学符号,集合运算,控制台改进 |
| 2.0 | 方框绘制改进,数学角度括号 |
| 1.0 | 多种字重,切换到上下文变体 |
最重要的是,4.0 版本引入了组合箭头系统,该系统取代了单独的箭头连字,提供了一个更灵活的系统,通过字符组合创建任意长度的箭头。
来源: CHANGELOG.md5-11 CHANGELOG.md18-67 CHANGELOG.md93-103
虽然 Fira Code 的功能在大多数现代环境中都能正常工作,但也有一些限制需要注意
编辑器支持 - 并非所有编辑器都能完全支持 OpenType 功能。如需完整的列表,请参阅 安装和使用。
终端支持 - 终端支持差异很大。iTerm2、Windows Terminal 和 Kitty 等终端支持良好,而其他终端可能支持有限或不支持。
连字冲突 - 某些连字可能与特定语言的语法结构冲突。Fira Code 尝试通过在可能发生冲突的上下文中禁用连字来避免这种情况。
性能 - 在某些环境中大量使用连字可能会影响文本渲染性能。
来源: README.md74-146 README.md149-171 CHANGELOG.md65-67
Fira Code 可以在构建时进行自定义,以永久启用特定功能。这对于无法切换功能的不可定制的环境非常有用。
这将构建一个 Fira Code 的自定义版本,默认启用指定的功能。您还可以使用 --weights 选项选择要构建的字重。
来源: README.md254-270