featured.svg

每天盯著編輯器與 terminal 超過八小時,字體幾乎是開發者最貼身的視覺介面。回顧過去幾年,我的主力字體一路從微軟經典的 Consolas、支援連字與手寫斜體的 Cascadia Code、字腔寬裕且閱讀極為舒適的商業字體 MonoLisa,一路換到 GitHub Next 主打 texture healing 動態字距與五大超家族的 Monaspace;這些字體都在不同時期陪伴我寫下無數行程式碼,但當工作流越來越依賴高密度的終端機與多視窗並排時,心裡總覺得想找一款更貼近老派工程手冊、俐落緊湊且毫無拖泥帶水的機械秩序感字體。

直到遇見 U.S. Graphics Company 推出的商業字體 Berkeley Mono (TX-02),以及開源社群以此為靈感、基於 Iosevka 參數化引擎打造的 Ioskeley Mono,那種源自 1970 年代技術手冊與資料終端機的字形比例,才真正讓程式碼與 TUI 介面同時安靜下來。

這篇文章除了整理這兩款字體的設計脈絡、字形解剖差異,以及在 IDE 與 Linux terminal(包含 Omarchy 環境)的最佳實務配置外,我也直接在文內嵌入了一套雙模式線上互動字體實驗室:你可以直接拖曳捲簾滑桿或原位閃切,對照 Berkeley Mono (TX-02) 與 Ioskeley Mono 的像素級差異,也能即時調整字級、行高、字寬與 OpenType 連字特徵,親手測試它們在程式碼與 terminal 框線下的實際表現。

為什麼開發者開始迷戀 1970 年代技術手冊風格?

過去我非常喜歡的幾款字體各有千秋:Consolas 在 Windows ClearType 時代奠定了極高的小字級易讀性;Cascadia Code 為現代終端機帶來活潑的連字;MonoLisa 擁有稍微加寬的字腔與極佳的長時間閱讀舒適度;而 Monaspace 則透過局部的字寬補償改善了等寬字體的疏密不均。然而當我們的工作流轉向多重 split pane、在左半邊開著編輯器、右半邊同時跑著多個 Ghostty 終端機與 TUI 工具(如 herdr、lazygit、btop 或 AI coding agent 的多工視窗)時,偏寬或偏柔和的字體往往會遇到三個取捨:

  1. 水平字距偏寬,分割視窗容納量受限:在 14 吋或 16 吋筆電螢幕上一旦切出左右兩個 80 列視窗,常見等寬字體很容易被迫折行。
  2. 字形情緒過於圓潤,大量符號堆疊時缺乏邊界感:當畫面充滿 Rust 的泛型與生命週期標記(<'a, T: Into<Cow<'a, str>>>)或巢狀括號時,過於柔和的弧線反而降低了視覺錨點。
  3. 終端機框線與文字基線的微妙脫節:部分針對 IDE 設計的字體在開啟連字後,遇到 terminal 內的 box-drawing 格線與資訊密度極高的 log 輸出時,整體節奏容易顯得鬆散。

Berkeley Mono (TX-02):源自冷戰時期工程圖紙的秩序感

由設計師 Neil Panchal 與 U.S. Graphics Company 主導設計的 Berkeley Mono (TX-02),最初是為了自家 CAD 與工程軟體介面量身打造的專屬字體。它的設計哲學非常明確:回到 1970 至 1980 年代的微處理器資料手冊(databooks)、航太儀表與早期 CRT 終端機,追求高辨識度、方正的幾何轉角,以及長時間閱讀不疲勞的灰度節奏。

Berkeley Mono 最吸引人的特質在於它「收斂卻不擁擠」的字腔結構:

  • 方中帶剛的幾何輪廓:字母的轉角帶有微妙的平切弧度(superellipse),既不像純點陣字體那樣生硬,也沒有多餘的裝飾襯線。
  • 零歧義的字元家族:針對程式設計最容易混淆的 0 / O、1 / I / l 做了極為鮮明的結構區隔。
  • 緊湊的水平節奏:在維持充裕字懷(counter)的前提下微調字元推進寬度,讓每一行程式碼像排好隊的積體電路針腳一樣整齊。

不過,Berkeley Mono 是一款採用商業授權的閉源字體(個人開發者授權 FX-102 定價為 $75 美元;官方另有提供代號 FX-050 7 天免費評估試用版可供下載測試,但 EULA 授權條款禁止將字型檔二次散佈或直接託管於公開網站)。如果你想在多台 Linux 工作站、容器環境、公開的 dotfiles 儲存庫或網頁專案中自由封裝使用,商業授權條款自然有其邊界。這也促成了開源社群最令人驚豔的一次致敬行動。

Ioskeley Mono:站在 Iosevka 肩膀上的開源致敬之作

Ioskeley Mono 是由開發者 Ahmed Hatem(ahatem/IoskeleyMono)發起、採用 SIL Open Font License 1.1 (OFL) 開源授權釋出的等寬字體專案。

它並沒有從零手繪每一筆貝茲曲線,而是巧妙運用了開源字體界最負盛名的參數化造字引擎 Iosevka v34.4.0。透過一份精心調校的 private-build-plans.toml 建置規格檔,Ioskeley Mono 在 Iosevka 數百種字形變體(glyph variants)與度量參數中,逐一挑選出最貼近 Berkeley Mono (TX-02) 視覺精神的組合,並編譯出完整的字體家族。

ioskeley-architecture.svg

這套建置管線帶來了幾個非常務實的工程優勢:

  • 完整的字重與字寬矩陣:原生提供從 Thin (100) 到 Black (900)(額外包含 SemiLight 350)共 10 種字重,並同時提供標準寬度 Normal (100%) 與微縮寬度 SemiCondensed (90%) 兩種版本。
  • 針對應用場景拆分的專屬變體:除了支援連字的標準版 Ioskeley Mono 與無連字版 Ioskeley Mono NL,還專門提供針對 terminal 單格對齊最佳化的 Ioskeley Mono Term,以及預先打好圖示補丁的 Nerd Font 版本。
  • 完全自由的開源授權:SIL OFL 1.1 允許你自由安裝在任何機器、打包進 Linux 系統映像檔,甚至直接子集化為 .woff2 嵌入個人技術部落格中。

線上雙模式互動字體對照實驗室

講再多字形理論,都不如直接把兩款字體放在同一塊畫布上親眼比對。由於 Berkeley Mono 屬於商業字體,我們無法直接將其原始字型檔散佈於公開網頁;因此我將下方的互動實驗室設計為兩個互補的模式:

  1. 即時互動編輯與終端機實驗室:直接載入自託管的 Ioskeley Mono(含 Regular、SemiCondensed 90% 與 Italic)、Monaspace Neon 與 Cascadia Code / Mono 網頁字型。為了遵守 U.S. Graphics Company 的 EULA 條款(禁止公開散佈字型檔),我們不將商業版或 FX-050 免費試用版字型打包進 GitHub 儲存庫;但只要你本機已安裝 Berkeley Mono / Berkeley Mono Trial,或點擊實驗室右上角的 「載入本機 FX-050 字型檔」 按鈕選取從官網免費下載的 .ttf / .otf / .woff2 檔案(100% 於瀏覽器記憶體內透過 FontFace API 渲染,不經過任何伺服器上傳),就能直接在左右面板即時對照!
  2. 像素級對照儀:將 Berkeley Mono (TX-02) 與 Ioskeley Mono 在完全相同字級(14.2px)、行高(1.54)與推進寬度下渲染的樣本進行零誤差像素對齊。你可以使用 捲簾滑桿 (Curtain Slider)左右拖曳,或點擊 原位閃切 (Blink Comparator)在同一座標瞬間切換,觀察兩者在字腔、筆畫粗細與細節上的異同。
↗ 下載 FX-050 試用版
Ioskeley Mono (Normal 100%) 約 -- 字元/列
Ioskeley Mono (SemiCondensed 90%) 約 -- 字元/列
提示:你可以直接在上方左右區塊打字或貼上自己的程式碼。試著勾選「切換斜線零 ('zero')」,觀察 0xFC82_0000 內部的中心方點瞬間變成斜線;也可以比較 Normal (100%) 與 SemiCondensed (90%) 在相同視窗寬度下每列可容納的字元數差異。
左側:Ioskeley Mono 右側:Berkeley Mono (TX-02)
IOSKELEY MONO (OPEN SOURCE) BERKELEY MONO (TX-02) Berkeley Mono TX-02 specimen
Ioskeley Mono specimen
⇄
實戰程式碼像素對照:兩款字體在完全相同的字級(14.2px)與字元格線上渲染。拖曳滑桿或切換至「原位一鍵閃切」,可以發現兩者的整體行距與字元落點完全吻合;細看則能察覺 Berkeley Mono (TX-02) 的筆畫略微厚實溫潤,而 Ioskeley Mono 的轉角與小寫 r、g、@ 則展現出更鮮明的幾何線條。

字形解剖:Ioskeley Mono 如何重現經典並走出自己的路?

如果你在上方實驗室切換到「Berkeley Mono (TX-02) × Ioskeley Mono 像素級對照儀」的第三個場景(128px 像素疊影解剖),會看到一個非常有趣的現象:兩款字體在單字元推進寬度(advance width)上達成了 +0.00 px 的零誤差同步,但在個別字元的局部筆畫上,因為 Iosevka 參數化骨架與手工繪製曲線的本質差異,展現了耐人尋味的細節對比。

招牌識別字元:點狀 0、單層 g、Q 與 @

我們可以從 ahatem/IoskeleyMono 的建置設定檔 private-build-plans.toml 中,看出作者是如何一磚一瓦挑選字形零件的:

[buildPlans.IoskeleyMono.variants.design]
zero = "dotted"                          # 預設採用中心點狀 0(Iosevka 另自動編譯 GSUB zero 斜線零特徵)
one = "no-base"
two = "straight-neck-serifless"
three = "flat-top-serifless"
six = "open-contour"                     # 6 與 9 採用開放式弧線缺口
eight = "two-circles"                    # 由上下兩個圓環組成的 8
nine = "open-contour"
capital-q = "crossing"                   # Q 的斜向尾筆俐落切過底部邊界
a = "double-storey-serifless"            # 雙層無襯線 a
g = "single-storey-serifless"            # 單層無襯線 g
k = "symmetric-touching-serifless"
r = "hookless-serifless"                 # 無鉤無襯線 r
y = "straight-serifless"
tittle = "square"                        # i 與 j 頂部圓點改為方點
punctuation-dot = "square"               # 句號、冒號與分號全面採用方點
paren = "flat-arc"                       # 近似垂直卻帶微弧的平弧括號 ()
brace = "curly-flat-boundary"
number-sign = "slanted"
at = "fourfold"                          # 高挑緊湊的四折 @ 符號
dollar = "through"                       # 豎線貫穿上下的 $ 符號

透過下方的像素疊影與對照表(圖中 象牙白 為共同骨架、琥珀金 為 Ioskeley Mono、珊瑚橘 為 Berkeley Mono TX-02),我們可以更清楚地歸納兩者在關鍵字形上的異同:

字元類別 像素疊影與視覺對照 Berkeley Mono (TX-02) 細節特徵 Ioskeley Mono 細節特徵
數字 0
方圓外框+中心點
0 像素疊影對照 中心點略呈圓潤橢圓,外框轉角較柔和 設定 zero = "dotted" 呈現俐落方點,且保留 Iosevka 內建的 OpenType zero 特徵可隨時切換為斜線 0
小寫 a 與 g
雙層 a・單層 g
a 與 g 像素疊影對照 a 的肚圍較貼近左緣;g 的下伸迴圈弧度較早收尾 採用 double-storey-serifless 與 single-storey-serifless,筆畫轉折更偏幾何直線
大寫 Q
矩形圓角+斜向尾筆
Q 像素疊影對照 尾筆從字腔內部偏左處起筆向右下延伸 採用 capital-q = "crossing",尾筆切入角度略高且向外探出更鮮明
符號 @ 與 $
高挑比例・貫穿 $
@ 與 $ 像素疊影對照 @ 內圈 a 較窄且外框底部收平 採用 at = "fourfold" 與 dollar = "through",內圈字懷更寬敞易讀
括號 () 與標點
平弧括號・方形句點
括號與標點對照 括號中段近似垂直,在巢狀呼叫時宛如垂直分隔線 透過 paren = "flat-arc"、tittle = "square" 與 punctuation-dot = "square" 忠實還原相同視覺節奏

為什麼點狀零(Dotted Zero)與平弧括號在程式碼中特別耐看?

許多程式字體為了區分 0 與 O,習慣使用斜線零(Slashed Zero)。然而當程式碼中出現大量十六進位常數(如 0x00FF_0000)或浮點數陣列時,密集的對角斜線容易與大寫 Ø、8 或斜線運算子 / 產生視覺干擾。

Berkeley Mono 與 Ioskeley Mono 預設採用的 點狀零 (Dotted Zero),將識別錨點收斂在字腔正中央的一顆方點上,既能瞬間與內部全空的字母 O 區隔,又不會破壞一整排零的水平安定感。而如果你在特定環境下還是偏愛斜線零,Ioskeley Mono 也貼心地把斜線零封裝在 OpenType 的 zero 特徵槽位中——不需要換字體檔,只要在編輯器或 terminal 設定裡加上一行 zero feature 就能隨時切換。

另一個令人一用就回不去的細節是 平弧括號 (flat-arc parentheses)。當我們在寫 Lisp、Rust 巨集或深層函式呼叫 foo(bar(baz(x))) 時,傳統圓弧括號 ((( 會形成一團向外膨脹的視覺噪音;而平弧括號把中段拉直、僅在上下兩端保留俐落折角,讓連續括號排在一起時就像一排整齊的柵欄,大幅降低了配對括號時的眼球掃描負擔。

如何挑選適合你的 Ioskeley Mono 變體?

第一次點開 Ioskeley Mono 的 GitHub Releases 頁面時,看到多達二十幾個壓縮檔可能會稍微猶豫一下。其實只要順著「使用場景(IDE vs. Terminal)」、「字元寬度(100% vs. 90%)」與「螢幕解析度(Hinted vs. Unhinted)」三個維度,就能在十秒內鎖定最適合的安裝包:

變體家族:Ioskeley Mono vs. NL vs. Term

  1. 標準版 Ioskeley Mono (推薦用於 IDE): 內建完整的 Iosevka 程式連字規則(contextual ligatures),包含常見的 !=、===、<=、>=、=>、->、:: 與 <=>。適合在 VS Code、Zed 或 JetBrains IDE 中做為主力字體。
  2. 無連字版 Ioskeley Mono NL (No-Ligature): 如果你是「所見即所得」的純粹主義者,不希望兩個獨立的 ASCII 字元被合併成單一圖形,選 NL 版本即可在字型層級徹底關閉連字。
  3. 終端機專屬版 Ioskeley Mono Term (推薦搭配 Nerd Font): 這是專為 terminal emulator 打造的變體。在終端機環境中,部分連字或特殊符號如果跨出單一字元格(character cell),可能會導致游標定位偏移或 TUI 表格錯位。Term 版本嚴格鎖定所有符號的格線邊界;而在實務上,我最推薦直接安裝社群打包好的 IoskeleyMonoTerm Nerd Font Mono,一次搞定 terminal 格線對齊與 eza、lazygit、starship 所需的開發者圖示。

字寬選擇:Normal (100%) vs. SemiCondensed (90%)

這是 Ioskeley Mono 相比原版商業字體的一大彈性優勢:

  • Normal (100%):字元寬高比與 Berkeley Mono (TX-02) 標準版一致,適合外接 27 吋以上 4K 螢幕、或是習慣將視窗維持在兩欄以內的開發環境。
  • SemiCondensed (90%):將水平推進寬度微縮 10%。正如你在上方互動實驗室看到的即時統計,在相同的視窗寬度下,SemiCondensed 每一列可以多塞進約 11% 的字元數,例如原本只能塞 80 列的分割視窗可以直接擴充到 89 列,而且因為字懷原本就方正飽滿,縮減 10% 後完全不會有壓扁變形的窒息感,非常適合筆電螢幕或重度 tmux / TUI 多視窗使用者。

渲染微調:Hinted vs. Unhinted

  • macOS 與 Linux HiDPI 外接螢幕:在 2x 縮放以上的高解析度螢幕上,建議選擇 Unhinted,讓 FreeType 或 CoreText 直接根據原始向量輪廓進行平滑抗鋸齒渲染,最能保留字體原本的粗細比例。
  • Windows ClearType 或標準 1080p 螢幕:在較低像素密度的環境下,建議選擇 Hinted 版本,透過字型內嵌的網格對齊指令(grid-fitting hints)強制將水平與垂直筆畫貼齊實體像素邊界,避免小字級下出現邊緣發虛。

在 IDE 與 Linux 終端機的實戰配置

以下整理我在日常使用的編輯器與 Linux 終端機環境中,讓 Berkeley Mono 與 Ioskeley Mono 發揮最佳視覺效果的設定範例。

VS Code 與 Zed 編輯器設定

在 VS Code 的 settings.json(支援 JSONC 註解語法)中,我們可以將 Ioskeley Mono 與 Berkeley Mono 排進 fallback 鏈,並透過 editor.fontLigatures 同時控制連字與點狀/斜線零:

{
  "editor.fontFamily": "'Ioskeley Mono', 'Berkeley Mono', 'Monaspace Neon', 'Cascadia Code', Consolas, monospace",
  "editor.fontSize": 14.5,
  "editor.lineHeight": 1.55,
  "editor.fontWeight": "400",
  // 若想維持預設點狀 0 並開啟連字:
  "editor.fontLigatures": "'calt' 1, 'liga' 1, 'zero' 0"
  // 若想將 0 切換為斜線 0,改設為: "'calt' 1, 'liga' 1, 'zero' 1"
}

而在以 Rust 與 GPUI 打造的 Zed 編輯器(~/.config/zed/settings.json)中,則可以透過 buffer_font_features 精準指定:

{
  "buffer_font_family": "Ioskeley Mono",
  "buffer_font_size": 15,
  "buffer_line_height": { "custom": 1.55 },
  "buffer_font_features": {
    "calt": true,
    "zero": false
  }
}

主流終端機設定(Ghostty、Alacritty、Foot)

在 terminal 環境中,建議統一使用 IoskeleyMonoTerm Nerd Font Mono 以確保 TUI 框線(┌─┬─┐)與圖示完美對齊。

Ghostty (~/.config/ghostty/config)

font-family = "IoskeleyMonoTerm Nerd Font Mono"
font-size = 12
adjust-cell-height = 10%
# 若偏好斜線 0,可取消下一行註解:
# font-feature = +zero

Alacritty (~/.config/alacritty/alacritty.toml) 與 Foot (~/.config/foot/foot.ini)

在 Alacritty 中:

[font]
size = 12.0
normal = { family = "IoskeleyMonoTerm Nerd Font Mono", style = "Regular" }
bold = { family = "IoskeleyMonoTerm Nerd Font Mono", style = "Bold" }
italic = { family = "IoskeleyMonoTerm Nerd Font Mono", style = "Italic" }

在 Wayland 原生輕量終端機 Foot 中:

[main]
font=IoskeleyMonoTerm Nerd Font Mono:size=12
line-height=18px

在 Omarchy Linux 中一鍵完成全系統切換

如果你跟我一樣在桌機或筆電上使用 DHH 主導的 Omarchy 開發者環境(基於 Arch Linux + Hyprland),設定起來又更省事了。將字型檔解壓縮放入 ~/.local/share/fonts/IoskeleyMono/ 並更新字型快取後,只需要執行內建的 omarchy-font-set 指令:

# 重新掃描字型快取並確認系統已識別
fc-cache -fv ~/.local/share/fonts/IoskeleyMono
fc-list | grep -i "IoskeleyMonoTerm"

# 一鍵同步更新系統所有終端機與預設等寬字體
omarchy-font-set "IoskeleyMonoTerm Nerd Font Mono"
# 或在較新版 Omarchy 使用: omarchy font set "IoskeleyMonoTerm Nerd Font Mono"

這行指令會自動幫你把 Ghostty、Kitty、Alacritty、Foot、Waybar 狀態列,以及 ~/.config/fontconfig/fonts.conf 中的全域 <family>monospace</family> 對應一次更新到位。當所有視窗、狀態列與 TUI 面板都換上統一的 1970 年代工程手冊字形時,整個桌面環境的視覺一致性真的非常賞心悅目。

結語:商業原創與開源參數化造字的良性共鳴

回頭看 Berkeley Mono (TX-02) 與 Ioskeley Mono 的關係,我認為它們並不是零和替代,而是字體生態系裡一段很有意思的對話:

  • 如果你深深著迷於 Neil Panchal 對每一筆曲線的手工打磨,且日常主力環境是固定的個人工作站,直接購買一套商業版 Berkeley Mono 支持獨立字體設計師,絕對是一筆值得的投資。
  • 如果你需要跨多台 Linux 機器透過 dotfiles 自動部署、偏愛 SemiCondensed (90%) 的高密度分割視窗排版、需要原生的 Nerd Font terminal 支援,或者想先在自己的日常專案裡零成本體驗這種冷冽俐落的工程手冊美學,那麼開源的 Ioskeley Mono 無疑是目前完成度極高的選擇。

不妨現在就捲回上方的互動實驗室,把你最常寫的程式碼貼進去,親眼試試看哪一種字寬與字形組合最對你的胃口吧!