Logo Craft Homelab Docs Контакты Telegram
bat: клонирование cat с подсветкой синтаксиса и интеграцией Git
top
Wed Oct 22 2025

bat: когда cat уже не торт

Помните ту первую команду, которую все учат в Linux? cat file.txt — и вот он, текст на экране. Просто, понятно, работает. Годами я печатал эту комбинацию, даже не задумываясь. А потом увидел, как коллега открыл Python-файл в терминале, и там была… подсветка синтаксиса. В терминале, Карл! Оказалось, он использовал bat — и моя жизнь разделилась на «до» и «после».

Что не так с cat?

Ничего, если честно. Утилита cat делает ровно то, для чего создана — выводит содержимое файлов. Но мы же в 2025 году. Наши IDE подсвечивают код, показывают изменения в Git, нумеруют строки. А в терминале — чёрно-белый текст, как в 70-х. Странно, правда?

bat решает эту нестыковку элегантно. Это не попытка заменить cat чем-то революционным — это скорее его эволюция. Та же простота использования, но с плюшками, которых нам не хватало.

Подсветка — это только начало

Да, синтаксическая подсветка — штука приятная. Открываешь JavaScript, и он выглядит как JavaScript, а не как месиво символов. bat поддерживает безумное количество языков благодаря библиотеке syntect, той самой, что используется в редакторах на базе Sublime Text.

Но вот что меня зацепило по-настоящему: интеграция с Git. Видите плюсики и минусы слева от кода? Это не декорация. bat показывает, какие строки вы изменили с последнего коммита. Прямо в выводе файла. Сколько раз я делал git diff, чтобы вспомнить, что поменял? Теперь достаточно bat src/main.rs.

А ещё номера строк. Казалось бы, мелочь. Но когда читаешь логи ошибок или обсуждаешь код по видеосвязи, возможность сказать “смотри на строку 47” вместо “вот там, где if… нет, ниже… ещё ниже” — бесценно.

Страницы без боли

Открыли файл на 5000 строк? bat автоматически прокинет вывод через less. Не нужно вручную добавлять | less или безумно скроллить терминал. Маленький файл? Выведется сразу, без лишних действий. Перенаправили вывод в другую команду? bat поймёт и отключит все украшательства, работая как обычный cat.

Это называется «вести себя как cat, когда нужно». Можете спокойно делать alias cat='bat' и не бояться, что что-то сломается. Хотя я рекомендую alias cat='bat --paging=never' для полной совместимости.

Когда bat показывает класс

Самое интересное начинается при интеграции с другими инструментами. Используете fzf для поиска файлов? Добавьте bat как превью:

fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"

Теперь при выборе файла вы сразу видите его содержимое с подсветкой. Не нужно открывать, проверять, закрывать.

Смотрите логи через tail -f? Комбинируйте с bat:

tail -f /var/log/nginx/access.log | bat --paging=never -l log

Логи с подсветкой синтаксиса — это почти медитативно.

А ещё bat умеет красиво показывать --help сообщения. Создайте алиас:

alias bathelp='bat --plain --language=help'
help() {
    "$@" --help 2>&1 | bathelp
}

И вызывайте help docker run — получите цветную справку вместо серой портянки текста.

Темы, синтаксисы и настройки

Из коробки bat идёт с темой Monokai Extended. Отлично работает, но вкусы у всех разные. Посмотреть все доступные темы: bat --list-themes. Понравилась TwoDark? Сделайте её постоянной:

export BAT_THEME="TwoDark"

Или добавьте в конфиг (bat --config-file покажет путь):

--theme="TwoDark"
--style="numbers,changes,header"

Нужна подсветка для экзотического языка? bat использует те же файлы синтаксиса, что и Sublime Text. Нашли нужный .sublime-syntax на GitHub? Закиньте в ~/.config/bat/syntaxes/, выполните bat cache --build — готово.

Работаете с файлами, которые имеют нестандартное расширение? Например, .conf файлы хотите подсвечивать как INI:

bat --map-syntax='*.conf:INI' config.conf

Или добавьте в конфиг для постоянного эффекта.

Под капотом

bat написан на Rust, что объясняет его скорость и надёжность. Использует библиотеки syntect для подсветки и git2 для интеграции с Git. При этом остаётся простой однофайловой утилитой без зависимостей в рантайме.

Интересная деталь: bat сам разворачивает табы в пробелы (по умолчанию в 4) вместо того, чтобы полагаться на пейджер. Это решает проблемы с выравниванием, которые иногда возникают из-за боковой панели с номерами строк. Если хотите другую ширину таба — используйте --tabs=2 или сколько вам нужно.

Когда можно обойтись без bat

Не всегда нужны все эти фичи. Если вы пишете скрипт, который парсит вывод — используйте обычный cat. Если работаете на сервере с минимальным окружением — cat всегда будет под рукой. Если вам критично не тянуть дополнительные 3-4 МБ бинарника — cat весит килобайты.

bat — это инструмент для повседневной работы в терминале, когда вы смотрите код глазами, а не программно его обрабатываете.

Установка — проще некуда

На Ubuntu/Debian (начиная с версии 20.04):

sudo apt install bat

Внимание: исполняемый файл может называться batcat из-за конфликта имён. Создайте симлинк:

mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat

На macOS через Homebrew:

brew install bat

Windows с Chocolatey:

choco install bat

Или качайте готовые бинарники со страницы релизов на GitHub.

Почему это работает

В мире утилит командной строки есть две крайности. Первая — минималистичные инструменты, которые делают одну вещь и делают её хорошо. Вторая — комбайны с тысячей опций, где нужно читать мануал на 50 страниц. bat нашёл золотую середину. Он берёт простую концепцию (cat) и добавляет фичи, которые не усложняют использование, а делают его приятнее.