Найти в Дзене

Квадратики вместо иконок в терминале: как это починить раз и навсегда

Поставил тему для терминала - получил кашу из символов. Nerd Fonts решает это за пять минут.
Темы для терминалов - oh-my-zsh, Starship, Powerlevel10k, конфиги для Neovim и tmux - активно используют иконки: стрелки ветвления Git, логотипы языков, индикаторы батареи, разделители секций. Эти символы живут в зонах Unicode, которые в обычных шрифтах пустые. Терминал честно рисует то, что находит:
Оглавление

Шрифт с иконками для терминала
Шрифт с иконками для терминала

Поставил тему для терминала - получил кашу из символов. Nerd Fonts решает это за пять минут.

Что происходит и почему

Темы для терминалов - oh-my-zsh, Starship, Powerlevel10k, конфиги для Neovim и tmux - активно используют иконки: стрелки ветвления Git, логотипы языков, индикаторы батареи, разделители секций. Эти символы живут в зонах Unicode, которые в обычных шрифтах пустые. Терминал честно рисует то, что находит: прямоугольник-заглушку.

Проблема не в теме и не в терминале. Проблема в шрифте. Он просто не знает, что должно быть в этих кодовых точках.

Nerd Fonts берёт популярные моноширинные шрифты и вшивает в них глифы из десятка иконочных наборов: Font Awesome, Material Design Icons, Octicons, Devicons, Powerline и ещё нескольких. Итого - больше 10 000 глифов в одном шрифте. После замены шрифта квадратики исчезают, и тема выглядит так, как задумал автор.

Для кого это нужно, а для кого нет

Нужно, если вы:

  • настраиваете терминал под себя и используете темы с иконками
  • работаете в Neovim, Vim с плагином VimDevIcons, или в любом TUI-приложении с иконками
  • пишете скрипты, которые выводят статусные строки с символами
  • используете Termux на Android и хотите нормальный вид в мобильном терминале

Не нужно, если вы открываете терминал раз в месяц запустить ping и вас устраивает стандартный шрифт. Nerd Fonts - инструмент для тех, кто проводит в терминале часы, а не минуты.

Что внутри: 67 готовых семейств

Проект не заставляет патчить шрифты самостоятельно - хотя такая возможность есть. В репозитории уже собраны 67 готовых семейств: Hack, JetBrains Mono, FiraCode, Cascadia Code, Iosevka, Meslo, Source Code Pro, Ubuntu Mono, Victor Mono и десятки других. Каждое семейство идёт в нескольких вариантах: обычный, жирный, курсив, моноширинный и пропорциональный глифы.

Удобно, что можно выбрать именно тот шрифт, к которому уже привык, и получить его патченную версию - без смены привычки, только с добавленными глифами.

Установка: выбери свой способ

Проект предлагает десять способов установки. Вот четыре самых практичных.

Linux - скрипт установки одного шрифта:

curl -fLo ~/.local/share/fonts/JetBrainsMonoNerdFont-Regular.ttf \

https://github.com/ryanoasis/nerd-fonts/raw/HEAD/patched-fonts/JetBrainsMono/Ligatures/Regular/JetBrainsMonoNLNerdFont-Regular.ttf

Эта команда скачивает один файл шрифта напрямую из репозитория и кладёт его в пользовательскую директорию шрифтов. После этого нужно обновить кэш шрифтов:

fc-cache -fv

fc-cache - утилита из пакета fontconfig, которая пересканирует директории шрифтов и делает новый шрифт видимым для приложений. Флаг -f принудительно обновляет кэш, -v показывает процесс.

macOS через Homebrew:

brew install font-jetbrains-mono-nerd-font

Homebrew Cask хранит патченные шрифты как отдельные пакеты. Замените jetbrains-mono на название нужного шрифта - список доступен в README проекта.

Windows через Scoop:

scoop bucket add nerd-fonts

scoop install JetBrainsMono-NF

Первая строка подключает репозиторий шрифтов к менеджеру пакетов Scoop. Вторая устанавливает конкретный шрифт. После установки шрифт появляется в системе автоматически.

Arch Linux:

sudo pacman -S ttf-jetbrains-mono-nerd

Патченные шрифты есть в официальном репозитории Extra - не нужен AUR, не нужны сторонние источники.

После установки откройте настройки терминала и смените шрифт на установленный. В названии будет «Nerd Font» или «NF» - по этому признаку легко найти.

Патчер: если нужного шрифта нет в списке

67 семейств - много, но не всё. Если вы используете корпоративный шрифт или редкую находку, которой нет в списке, проект предоставляет Font Patcher - скрипт на Python с использованием FontForge.

fontforge -script font-patcher YourFont.ttf --complete

--complete добавляет все доступные наборы глифов разом. Без этого флага по умолчанию добавляются только Seti-UI и Devicons - минимальный набор. Скрипт создаёт новый файл шрифта рядом с оригиналом, не затрагивая исходник.

Для работы нужен установленный FontForge - это отдельный open-source редактор шрифтов. На большинстве дистрибутивов он ставится через системный менеджер пакетов.

Подводные камни, о которых не пишут в README

Первый: не клонируйте репозиторий целиком. Там больше 60 семейств в нескольких вариантах каждое - размер репозитория измеряется гигабайтами. Скачивайте только нужные шрифты через curl или менеджер пакетов.

Второй: пути к файлам в ветке master нестабильны. Если вы автоматизируете установку скриптом, используйте ссылки из конкретного релиза, а не из HEAD. Разработчики честно предупреждают об этом в README - что само по себе редкость.

Третий: после смены шрифта в терминале перезапустите его полностью. Некоторые терминальные эмуляторы кэшируют метрики шрифта и показывают артефакты до перезапуска.

Четвёртый, и это спорный момент: Nerd Fonts использует зоны Unicode, которые формально зарезервированы для частного использования (Private Use Area). Это значит, что если вы откроете текст с такими символами в другом приложении без патченного шрифта - снова увидите квадратики. Это не баг проекта, это архитектурное решение, и оно работает ровно в той среде, для которой предназначено - в терминале с правильным шрифтом.

Что в итоге

62 000 звёзд на GitHub - это не случайность. Nerd Fonts закрывает конкретную проблему конкретным инструментом: берёшь шрифт, который уже знаешь, получаешь его с иконками. Никакой подписки, никакого аккаунта, никакого «скачайте наш лаунчер».

Проект существует с 2014 года, активно поддерживается и покрывает все основные платформы. Для разработчика, который проводит половину рабочего дня в терминале, это не украшение - это инфраструктура.

Единственное, что раздражает: отсутствие нормального поискового интерфейса прямо в терминале для поиска нужного глифа по имени. Cheat Sheet на сайте проекта решает это частично, но хотелось бы nf search arrow прямо в консоли.

А вы пользуетесь патченными шрифтами или держите терминал в спартанском виде без иконок - и считаете всё это лишней мишурой?

Источник: Nerd Fonts - GitHub

🔔 Подписывайтесь на КликХак - разбираем инструменты, которые реально используем, без пересказа пресс-релизов.