21世纪地球的某个地方,有一位跳级被大学录取的神童法拉尔。因为周围的期待,他宣布要进修当时被认为最为重要的学问「炒面」。但是,对于一直都热心投入的计算机,他也难以舍弃。某一天,他遇到了一个叫希尔伯特的神秘学者。据说希尔伯特因为接触到了基于异端思想的禁忌研究,被同行笑话了多年。而他研究的,是和编程字体有关,冲击力十足的「某个假说」——

如果我用 Times New Roman 写代码会怎么样?

——答案是你可能会被其他人一直笑话,并且发现看代码很容易产生视觉疲劳,最重要的,在中英文混拼的时候,你会发现字对不齐。

这篇文章里,我会对我用过的字体进行评价,而文末会提供找到更多字体的办法。

但在此之前,还是先讨论选一个编程字体有什么好处,这对选择一个适合自己的字体会有所帮助。

不是随便找一个字体就作为编程字体的

非等宽字体?不行!

上面说的「对不齐」就是非等宽字体的问题。非等宽字体在设计的时候并没有要求各个字母是等宽的,例如 oi 就是宽度不一样的一对,由此会产生一个诡异的反直觉的情况——字符数量更多的,长度可能还更短。

比如说上面 oi 的例子,两行放在一起的时候:

iiiiiii ooooo

明明只有 5 个字符长 o,却比 7 个字符长的 i 更长,一眼看去会分不清这两个字符串哪个更大。

因此选择等宽字体作为编程字体会是比较好的选择。在等宽字体中,中文是 2 字符长,英文是 1 字符长,并且所有字符长度都是 1 字符的某个倍数,相当整齐。

Nerd Fonts

一般有些编程字体会附注 NF 后缀,那可能就是指 Nerd Fonts

呆子字体

并不是说这是给🤓用的字体,这是将图标和字体进行混合,通过字符可以显示出图标。在终端这种不能显示一个字符显示图案的地方相当有用。

这个并不是刚需,所以这里就不展开提了。

视觉疲劳

编码过程需要盯着代码看,因此如果字体不够清晰易于辨认的话,容易造成视觉疲劳,从而导致脸不自觉离屏幕越来越近来进行补偿,或者越写越烦。

而另一个容易造成视觉疲劳的是那些容易被弄混的字,比如说o0o0o0o0o0o0o 或者 ililililililiIl 这种。不少编程字体通过衬线或者给 0 中心打点或者画斜线来标识,从而即便离得远,敲码敲得天昏地暗了也不容易看错。

选择一个适合自己眼睛、看起来美观舒适的字体能够改善编码的体验。

其他趣味

此外换用一个字体还能带来其他趣味,堪比初高中时代买了一堆笔来回换着用一样。看到编码用的字体符合审美和喜好,对改善编码心情来说再好不过。

而有些字体还会提供连字功能,比如说 -> 就能自动显示成 。有人可能喜欢也有人可能不喜欢,不过不用担心,字体一般会提供连字版本和非连字版本供选择。

找一个适合的编程字体

编程字体有不少,根据我的经验来说,可以都试一下,反正大部分都在 Github 开源并且下载不要米,只要使用一阵子,就能知道哪个字体可以接受,哪个字体不喜欢了。

选择时候倒也不用听人说哪个哪个好,实际上只要顺眼连非等宽也能用——毕竟实际看字体的是自己而不是其他人,推荐等宽是因为大部分人来说等宽都更加舒适。

另外找字体的时候需要注意,如果一个字体有等宽和非等宽版本,那么通常会在等宽版本后面加上 Monospace 或者 Mono 之类的词来标识,下载的时候别下错了。

另外一提,如果你不知道用什么,我推荐 Ubuntu Mono 或者 Cascadia Mono,前者来自于 Ubuntu,而后者来自于微软的 Powershell。

Ubuntu Monospace

Ubuntu Mono 是我用了一年还是两年的字体,我肉眼感觉这个字体有个比其他字体独特的好处,那就是不论是在大屏幕还是笔记本的小屏幕上看都足够——通常其他字体要做到这样,需要调整字号和行高。

而 Ubuntu Mono 相当夸张,13 字号这么小也能让我看清,并且不用调行高,外观也很漂亮。

Cascadia Mono

对 Windows 用户的好消息,这个字体很可能系统自带了。

微软家的字体,如果打开 Powershell,里面正在用的字体很可能就是这个。这也是在我换成 Ubuntu Mono 之前一直在用的字体。

这个字体对我来说它能整合 Maple Mono 的圆润设计语言和 Fira Code 的适度突出衬线两个特点,虽然它出现的时间可能更早于两个字体。

非常耐看且舒服的字体。

Maple Mono

Maple 是我第二使用长的字体——在我发现 Cascadia Mono 之前,我基本就一直在用 maple。 好像已经说过类似的话了?不管了。

这款字体最大的特征就是圆润的设计语言,所有字符都是圆圆润润的,对于使用方角字体来说的人可能会觉得眼前一亮,我一开始也是这样的,但在用了一年多之后也有些腻了——总感觉圆过头了。不过好在即便看腻了也是漂亮的字体,没有那种尖锐感,相当养眼,所以即便腻了也没有换别的。

这个字体另一个特点是对中文的支持——没错,中文也是圆润的等距字体。相较于其他不支持中文而只能找中文等宽字体进行 Fallback 混编来说,maple 能够保证即便中文在场也有圆润的设计语言。

但问题也是中文引来的,这个字体的中文字与字之间的间距有些宽了,在阅读的时候给我感觉缺乏紧密和整体感,所以我并不喜欢 maple 的中文。

此外,maple 还有把比如说 [TODO] 这种字符串进行图案化和相当丰富的连字功能,不过就不展开说了。

Fira Code / Fira Mono

Fira Code 是在我发现 Maple Mono 前一直在用的字体,虽然很戏剧,但是 Fira Code 相比 maple 对我有更加难以接受的美中不足。

Fira Code 有个 Mono 版本,叫 Fira Mono。

这个字体也是很多网上博主会推荐的字体,包括很多人也在用。它给我的感觉就像是 Word 文档里面的楷体,在折角和衬线的地方会进行重点突出,只不过 Fira Code 的突出是比较克制的——但还是稍微显眼。

因此每次我看到 Fira Code 字体的时候都会迷惑一下,在想是不是 GPU 拿了把钉锤在屏幕上刻字,当然对于喜欢这种突出的人来说,Fira Code 可能就是最终答案了。

Fira Code 另一个问题是宽度比其他字体更宽了些。原因显而易见——突出了衬线的细节,为了同时具有清晰度要么拉宽让字松散一下,要么调大字号。Fira Code 显然不能调大字号,因此只能拉宽每个字符的宽度来保持清晰。

但这对我来说很折磨,因为我的编辑窗口经常只有半个笔记本屏幕还窄的宽度,它这样拉宽很容易就产生水平滚动条,很容易写到窗口外,看不到左右边写的东西。

于是我最后放弃使用了 Fira Code。

Jetbrains Mono

我猜是相当多人的最爱。

JetBrains Mono 是出自 Jetbrains 家的字体,你可能没听说过 Jetbrains,但你一定听说过 IDEA / CLion / Pycharm / Rider / Goland / Rustover,甚至四舍五入说 Android Studio 也有 Jetbrains 的一份功劳。

而 Jetbrains Mono 就是上述 IDE 默认的字体。

Jetbrains Mono 相当好看,方方整整接圆角但是不过分,就像克制了衬线突出的 Fira Code 或者克制了横屏竖直的 Vector Mono。

但是我没有选 Jetbrains Mono,理由和 Fira Code 是一样的,Jetbrains Mono 字符的宽度和 Fira Code 一样宽,在分窗口编辑的时候很容易产生水平滚动条。

Vector Mono

Vector Mono 是相当有特点的字体。

相当有特点的字体。正文用横平竖直和略微的圆角来表达印刷和机械的感觉,而斜体配合主题注释的设计,能够用放飞自我的手写体来强调其带有「人的思想」这种要素的表达。

挺好看的,但是我不会用,因为手写体对我来说有点折磨。

IBM Plex Mono

这个名字和字体给我的感觉就像是200x年正在 Windows 上用 C / C++ 编辑器上的默认字体进行编码一样。

虽然它实际上并不是那个经典字体,但是用它来敲码给我的体验确实是相当复古——没有各种花里胡哨,只有简单的衬线和等宽。

因此和 Vector Mono 一样,我认为是很挑人的字体。

除此之外,还有很多字体

在线试用

Programming Fonts 这个网站能够提供在线的编程字体演示,像我上面的提到的字体基本都有收录,这个网站能够免去要下载来试用的麻烦。

我一般在上面进行简单的初筛,看看和屏幕大小是否合适,然后才考虑下载使用一段时间。

当然也有美中不足,这上面的收录并不是很全,有些小众字体还是得亲自下载来试用。

Nerd Fonts

上面提到的 Nerd Fonts 网站的下载列表里面有不少常见编程字体的 Nerd Font 版本,反过来说,可以根据这个列表快速知道有什么热门的编程字体——毕竟不热门的话,没人会特别去制作 Nerd Font 字体。

你甚至还能看到有人用 Comic Sans 或 Times New Roman 制作的 Nerd Font 字体进行编程,前者是小学初中英语课本对话用的那种字体,而后者是论文西文用的字体……可以说,用什么编程字体确实是看个人喜好来。

总而言之

所以总而言之,用什么是自己的自由,选择字体能带来好处也带来坏处,对我来说,坏处都能接受的字体那就是好字体,倒不必因为哪个热门哪个被人吹上天就去用,花点心思去选择一款喜欢、可以用很久的字体,既能在过程中享受如同折腾文具一样的乐趣,也能享受使用喜欢字体的心安。

哪怕最喜欢的是 Times New Roman 也是没问题的。