
🔤 Fira Code — czcionka monospace z ligaturami do programowania

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.fontFamilyorazeditor.fontLigatures - Proszę dobrać stylistic sets i character variants według własnego gustu: od
ss01docv31 - 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', '##', 0x0, '' 7 ); 8 for ($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 } 16 echo implode('', $out);
Z Fira Code
1 /** 2 * Стрелки --> и -->> иллюстрируют поток данных. 3 */ 4 $out = array(''); 5 $pieces = array( 6 '<!-- HTML -->', 'https://www.example.com/#!', 'red', '##', 0x0, '' 7 ); 8 for ($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 } 16 echo 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.jsonproszę 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 guiligaturesw 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 literaig, a takżeiilcv11-cv13: warianty zera (z kropką, bez, przekreślone)cv14: alternatywna trójkacv15: 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 pisaniass04: dolar$bez przekreśleniass05:@bez zakręconego ogonkass09: 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-ss10włączają i wyłączają grupy ligatur. Na przykładss09przywraca 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.



