Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🔤 Fira Code — czcionka monospace z ligaturami do programowania

🔤 Fira Code — czcionka monospace z ligaturami do programowania

Przykład kodu z ligaturami Fira Code w edytorze

Czym są ligatury i po co je stosować w kodzie

Ligatura: połączenie dwóch lub trzech znaków w jeden wizualny glif. W typografii ten zabieg znany jest od stuleci: litery „f" oraz „i" zlewają się w fi, aby na siebie nie nachodziły. W programowaniu ta sama mechanika działa z operatorami.

Kiedy pisze Pan/Pani !=, a zaraz potem => i >= lub ===, Pana/Pani oko odczytuje je jako pojedynczy token logiczny. Jednak na ekranie są to dwa lub trzy oddzielne znaki i mózg zużywa mikrowysiłek na ich sklejenie. W ciągu dnia pracy takich mikrooperacji zbierają się tysiące. Ligatury rozwiązują problem: != zamienia się w przekreślony znak równości (≠), => staje się pogrubioną strzałką, >= wygląda jak spójny symbol „większy lub równy".

Programista Nikita Prokopow (tonsky) zbudował na tym pomyśle cały font. Fira Code, wolna rodzina o stałej szerokości oparta na Fira Mono, rozszerzona o ligatury programistyczne. Pod maską czysty ASCII: kod źródłowy nie ulega zmianie, renderowanie odbywa się na poziomie fontu. Plik pozostaje ten sam, czyta się go inaczej.

💡 Szybki przegląd:

  • Proszę pobrać Fira Code z wydania na GitHubie: ZIP ~2,5 MB, wersja 6.2, bezpłatnie
  • Proszę zainstalować font w systemie i ustawić w edytorze editor.fontFamily oraz editor.fontLigatures
  • Proszę dobrać stylistic sets i character variants według własnego gustu: od ss01 do cv31
  • Proszę sprawdzić wsparcie swojego edytora w oficjalnej tabeli kompatybilności na GitHubie

Jak Fira Code zmienia czytanie kodu

Pierwsze, co rzuca się w oczy po instalacji: operatory porównania. Tam, gdzie wcześniej było != (wykrzyknik + znak równości), teraz jest pojedynczy przekreślony symbol. <= i >= wyglądają jak znaki matematyczne z podręcznika, a nie jak dwa rozdzielne znaki ASCII.

Strzałki: osobna magia. Każdy łańcuch złożony z myślników i nawiasów ostrokątnych składa się w nieprzerwaną linię. Proszę spróbować -->, <-- i <-->, zlewają się w ciągłą strzałkę. W Fira Code 4 autor zastąpił 44 osobne ligatury strzałek czterema regułami kombinatorycznymi. Teraz strzałki mogą mieć dowolną długość. Działa nawet ---> i <---.

Operatory wieloznakowe również składają się w pojedyncze glify: === i !==, :: i //, |||. Komentarze <!-- --> wyglądają schludniej. Dla miłośników programowania funkcyjnego są |> i >>= z =<< oraz dziesiątki innych.

Poniżej ten sam kod PHP bez Fira Code i z nim. Różnica nie jest krzykliwa, ale proszę spróbować „znaleźć różnice": oko szybciej wyłapuje operatory.

Bez Fira Code

1/**
2 * Стрелки --> и -->> иллюстрируют поток данных.
3 */
4$out = array('');
5$pieces = array(
6 '<!-- HTML -->', 'https://www.example.com/#!', 'red', '&#35;&#35;', 0x0, ''
7);
8for ($i = 0; $i <= 5; $i++) {
9 if ($i == '2' || $pieces[$i] === 'red') {
10 $hex__red = 0xca0000;
11 $out[] = $hex__red >> 15; // 404
12 } elseif ($i !== 3 && $pieces[$i] != false) {
13 $out[] = $pieces[$i];
14 }
15}
16echo implode('', $out);

Z Fira Code

1/**
2 * Стрелки --> и -->> иллюстрируют поток данных.
3 */
4$out = array('');
5$pieces = array(
6 '<!-- HTML -->', 'https://www.example.com/#!', 'red', '&#35;&#35;', 0x0, ''
7);
8for ($i = 0; $i <= 5; $i++) {
9 if ($i == '2' || $pieces[$i] === 'red') {
10 $hex__red = 0xca0000;
11 $out[] = $hex__red >> 15; // 404
12 } elseif ($i !== 3 && $pieces[$i] != false) {
13 $out[] = $pieces[$i];
14 }
15}
16echo implode('', $out);

Oba bloki są identyczne co do znaku. Różni się jedynie font. W drugim przypadku <= i >= stały się spójnymi znakami, != i !== wyglądają na przekreślone, a --> zamienił się w strzałkę. Czytanie przyspiesza nie radykalnie, ale odczuwalnie. Szczególnie podczas długich sesji code review.

Gdzie działa Fira Code

Font wspierają dziesiątki edytorów: od VS Code i Sublime Text po Vima i Emacsa. Pełna lista znajduje się w tabeli kompatybilności na GitHubie.

Kluczowe platformy:

  • VS Code: natywne wsparcie. W settings.json proszę wpisać "editor.fontFamily": "'Fira Code'", "editor.fontLigatures": true. Zestawy stylistyczne włącza się przez "editor.fontLigatures": "'calt', 'ss02', 'ss09'".

  • JetBrains IDE (IntelliJ, PhpStorm, WebStorm, Rider): od wersji 2016.2. Włączenie: Editor → Font → wybrać Fira Code → zaznaczyć Enable ligatures.

  • Sublime Text: począwszy od buildu 3146. W ustawieniach użytkownika: "font_face": "Fira Code".

  • Vim/Neovim: przez set guiligatures w wersjach GUI i łatki dla wersji terminalowych.

  • Terminale: Windows Terminal, iTerm 2, Kitty, Konsole, Tabby, Hyper, WezTerm. Nie działają: Alacritty, GNOME Terminal, xterm, PuTTY.

  • Przeglądarki: przez jsdelivr CDN. Proszę podłączyć <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/distr/fira_code.css"> i dodać font-feature-settings: "calt"; dla IE/starego Edge.

W praktyce instalacja wygląda tak: pobrał Pan/Pani ZIP z wydania, zainstalował TTF w systemie, ustawił font w edytorze, włączył ligatury. To wszystko. Żadnych wtyczek, żadnej magii, czysty @font-face na poziomie systemu operacyjnego.

Dostrajanie: warianty i zestawy stylistyczne

Główna przewaga Fira Code nad konkurencją: elastyczność. Nie podoba się konkretna ligatura? Proszę ją wyłączyć. Chce Pan/Pani inny rysunek litery? Proszę wybrać character variant. Wszystko konfiguruje się punktowo.

Character variants (cv01-cv31) zmieniają kształt poszczególnych znaków:

  • cv01-cv10: alternatywne rysunki dla liter a i g, a także i i l
  • cv11-cv13: warianty zera (z kropką, bez, przekreślone)
  • cv14: alternatywna trójka
  • cv15: gwiazdka dociśnięta do góry (wygodna dla wskaźników w C/C++)
  • cv31: alternatywne nawiasy ()

Stylistic sets (ss01-ss10) sterują ligaturami:

  • ss01: alternatywne renderowanie &&
  • ss02: <= bez pochylenia, z poziomą kreską
  • ss03: & w stylu starej maszyny do pisania
  • ss04: dolar $ bez przekreślenia
  • ss05: @ bez zakręconego ogonka
  • ss09: przywraca rozdzielne >>= / <<= / ||= (w v6 usunięte z domyślnych, więcej na GitHubie)

Na osobną wzmiankę zasługują paski postępu. Fira Code: pierwszy font programistyczny, w którym znaki U+EE00-U+EE0B renderują się jako pasek postępu. Terminal wypisuje sekwencję , a użytkownik widzi estetyczne wypełnienie. Do wykrywania wsparcia zaproponowano zmienną środowiskową UNICODE_PROGRESS_BAR=true.

Alternatywy: z czym porównać

Fira Code nie jest jedynym fontem z ligaturami. Rynek przez ostatnie lata się rozrósł i każda opcja ma swój akcent:

Font

Licencja

Cecha szczególna

JetBrains Mono

SIL OFL

Podwyższona czytelność, różna wysokość liter małych, brak zaokrągleń

Cascadia Code

SIL OFL

Font Microsoftu dla Terminala, wsparcie Powerline, box drawing

Iosevka

SIL OFL

Wąski font, generowany kodem, maksymalnie kompaktowy

Victor Mono

MIT

Prawdziwa kursywa z szeryfami, nie pochylona

Hasklig

SIL OFL

Odgałęzienie Source Code Pro z ligaturami dla Haskella

Monoid

MIT

Wsparcie Powerline, konfigurowalna szerokość

Fira Code wygrywa nie pięknem pojedynczych liter (to kwestia gustu), ale zakresem i dojrzałością. 81 000 gwiazdek na GitHubie, sześć głównych wydań, setki wspieranych edytorów, 31 character variant, paski postępu, symbole matematyczne, wsparcie box drawing i Powerline. Gdy wybiera się font na lata, ekosystem waży nie mniej niż estetyka.

⁉️🤔 Często zadawane pytania

Zainstalowałem Fira Code, ale ligatury się nie pojawiły. O co chodzi?

Najprawdopodobniej edytor wymaga osobnego włączenia. W VS Code jest to "editor.fontLigatures": true. W JetBrains IDE: zaznaczenie „Enable ligatures" w ustawieniach fontu. W terminalach proszę sprawdzić, czy Pana/Pani emulator wspiera ligatury: Windows Terminal wspiera, ConEmu nie.

Ligatury rozpraszają. Czy można zostawić tylko niektóre?

Tak. Zestawy stylistyczne ss01-ss10 włączają i wyłączają grupy ligatur. Na przykład ss09 przywraca rozdzielne >>= i <<=. Do punktowej konfiguracji można przebudować font lokalnie komendą ./script/build.sh --features "ss02,ss08,cv14".

Fira Code spowalnia edytor. Czy to normalne?

W wersji 4 przeprowadzono optymalizację renderowania: 44 osobne ligatury strzałek zastąpiono czterema regułami kombinatorycznymi, wydajność wzrosła o 100-150%. Jeśli spowalnia teraz, proszę sprawdzić, czy nie są równolegle włączone inne funkcje fontu (calt plus zestawy ss zwykle nie powodują opóźnień).

Jaka jest cyrylica w Fira Code?

Zestaw cyrylicki został odziedziczony po Fira Mono: czytelny, neutralny, bezpretensjonalny. Do kodu po ukraińsku (komentarze, stringi) wystarcza. Jeśli jednak pisze Pan/Pani dokumentację po ukraińsku w dużej objętości, proszę przyjrzeć się JetBrains Mono: jego cyrylica jest lepiej dopracowana.

Czy warto przejść na Fira Code w 2026 roku

Font nie był aktualizowany od grudnia 2021. I to, choć może się to wydawać dziwne, jest dobrym znakiem. Gdy produkt jest doprowadzony do stanu „działa i nie psuje się", częste commity nie są potrzebne. Przez pięć lat bez wydań nikt nie napisał „Fira Code umarł". Po prostu się go używa.

Jeśli spędza Pan/Pani przy kodzie ponad 4 godziny dziennie, proszę zainstalować Fira Code na tydzień. Powrót do starego fontu odczuje Pan/Pani szybciej, niż się Pan/Pani spodziewa: oko przyzwyczaja się odczytywać operatory jako spójne tokeny i powrót do „rozłożonych" znaków odbiera się jako krok wstecz. Najgorsze, co się stanie: usunie Pan/Pani font po siedmiu dniach. Najlepsze: znajdzie Pan/Pani swoje narzędzie na lata.