Клон утилиты cat(1) с поддержкой выделения синтаксиса и Git
Ключевые возможности • Использование • Установка • Кастомизация • Цели и альтернативы • Перевод [中文][日本語][한국어][Русский]
### Выделение синтаксиса `bat` поддерживает выделение синтаксиса для огромного количества языков программирования и разметки: ![Пример выделения синтаксиса](https://i.imgur.com/3FGy5tW.png) ### Интеграция с Git `bat` использует `git` чтобы показать изменения в коде (смотрите на левый сайдбар): ![Пример интеграции с Git](https://i.imgur.com/azUAzdx.png) ### Показать непечатаемые символы Вы можете использовать `-A` / `--show-all` флаг чтобы показать символы, которые невозможно напечатать: ![Строка с неотображемыми символами](https://i.imgur.com/X0orYY9.png) ### Автоматическое разделение текста `bat` умеет траслировать вывод в `less` если он слишком большой, чтобы уместится на экране полностью ### Объединение файлов О... Вы также можете объединять файлы :wink:. Когда `bat` обнаруживает неинтерактивный терминал (например когда вы направляете вывод в файл или в процесс), `bat` будет работать как `cat` и откатится к выводу это файла как обычного текста (без поддержки синтаксиса) ## Как использовать Вывести единственный файл в терминале ```bash > bat README.md ``` Отобразить сразу несколько файлов в терминале ```bash > bat src/*.rs ``` Читаем из stdin и определяем синтаксис автоматически (внимание, это работает, читая заглавную строку файла, например `#!/bin/sh` ) ```bash > curl -s https://sh.rustup.rs | bat ``` Прочитать из stdin с явным указанием языка ```bash > yaml2json .travis.yml | json_pp | bat -l json ``` Вывести и выделить неотображаемые символы ```bash > bat -A /etc/hosts ``` Использование как замена `cat` ```bash bat > note.md # мгновенно создаем новый файл bat header.md content.md footer.md > document.md bat -n main.rs # показываем только количество строк bat f - g # выводит 'f' в stdin, а потом 'g'. ``` ### Интеграция с другими утилитами #### `find` или `fd` Вы можете использовать флаг `-exec` в `find` чтобы посмотреть превью всех файлов в `bat` ```bash find … -exec bat {} + ``` Если вы используете [`fd`](https://github.com/sharkdp/fd), вы вполне можете использоваль флаг `-X`/`--exec-batch` чтобы сделать тоже самое: ```bash fd … -X bat ``` #### `ripgrep` С помощью [`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md), `bat` может быть использован для вывода результата запроса [`ripgrep`](https://github.com/BurntSushi/ripgrep) ```bash batgrep needle src/ ``` #### `tail -f` `bat` может быть использован вместе с `tail -f` чтобы просматривать файл вместе с выделением синтаксиса ```bash tail -f /var/log/pacman.log | bat --paging=never -l log ``` Заметьте, что мы отключаем пэйджинг чтобы это заработало. Мы так-же указываем синтаксис (`-l log`), так как он не может быть определен в данном случае. #### `git` Вы можете использовать `bat` с `git show` чтобы просмотреть старую версию файла с выделением синтаксиса: ```bash git show v0.6.0:src/main.rs | bat -l rs ``` Обратите внимание, что выделение синтаксиса не работает в `git diff` на данный момент. Если вам это нужно, посмотрите [`delta`](https://github.com/dandavison/delta). #### `xclip` Количество строк и просмотр изменений в `bat` может сделать копирование содержания файла немного сложной. Чтобы предотвратить это, используйте флаг `-p`/`--plain` или просто перевести вывод в `xclip`: ```bash bat main.cpp | xclip ``` `bat` обнаружит, что вывод будет переведен, и выведет обычный текст без выделения синтаксиса. #### `man` `bat` может быть использован в виде выделения цвета для `man`, для этого установите переменную окружения `MANPAGER`: ```bash export MANPAGER="sh -c 'col -bx | bat -l man -p'" man 2 select ``` Возможно вам понадобится также установить `MANROFFOPT="-c"` если у вас есть проблемы с форматированием. Если вы хотите сделать этой одной командой, вы можете использовать [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md). Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории, и все еще находится в разработке. #### `prettier` / `shfmt` / `rustfmt` [`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) это скрипт, который форматирует код и выводит его с помощью `bat`. ## Установка [![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions) ### Ubuntu (с помощью `apt`) *... и другие дистрибутивы основанные на Debian.* `bat` есть в репозиториях [Ubuntu](https://packages.ubuntu.com/eoan/bat) и [Debian](https://packages.debian.org/sid/bat), и доступен начиная с Ubuntu Eoan 19.10. На Debian `bat` пока-что доступен только с нестабильной веткой "Sid" Если ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так: ```bash apt install bat ``` Если вы установили `bat` таким образом, то бинарный файл может быть установлен как `batcat` заместо `bat` (из-за [конфликта имени с другим пакетом](https://github.com/sharkdp/bat/issues/982)). Вы можете сделать симлинк или алиас `bat -> batcat` чтобы предотвратить проблемы которые могут произойти с другими дистрибутивами. ``` bash mkdir -p ~/.local/bin ln -s /usr/bin/batcat ~/.local/bin/bat ``` ### Ubuntu (С помощью самого нового `.deb` пакета) *... и другие дистрибутивы Linux основанные на Debian* Если пакет еще не был предоставлен в вашем Ubuntu/Debian дистрибутиве или вы хотите самую последнюю версия `bat`, вы можете скачать самый последний `deb` пакет отсюда: [release page](https://github.com/sharkdp/bat/releases) и установить так: ```bash sudo dpkg -i bat_0.15.4_amd64.deb # измените архитектуру и версию ``` ### Alpine Linux Вы можете установить [`bat`](https://pkgs.alpinelinux.org/packages?name=bat) из оффициальных источников: ```bash apk add bat ``` ### Arch Linux Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из оффициального источника: ```bash pacman -S bat ``` ### Fedora Вы можете установить [`bat`](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) из оффициального репозитория [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/). ```bash dnf install bat ``` ### Gentoo Linux Вы можете установить [`bat`](https://packages.gentoo.org/packages/sys-apps/bat) из оффициальных источников: ```bash emerge sys-apps/bat ``` ### Void Linux Вы можете установить `bat` с помощью xbps-install: ```bash xbps-install -S bat ``` ### FreeBSD Вы можете установить [`bat`](https://www.freshports.org/textproc/bat) с помощью pkg: ```bash pkg install bat ``` или самому скомпилировать его: ```bash cd /usr/ports/textproc/bat make install ``` ### С помощью nix Вы можете установить `bat` используя [nix package manager](https://nixos.org/nix): ```bash nix-env -i bat ``` ### openSUSE Вы можете установить`bat` с помощью zypper: ```bash zypper install bat ``` ### On macOS Вы можете установить`bat` с помощью [Homebrew](http://braumeister.org/formula/bat): ```bash brew install bat ``` Или-же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary): ```bash port install bat ``` ### Windows Есть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию ["Использование `bat` в Windows"](#using-bat-on-windows). #### С помощью Chocolatey Вы можете установить `bat` с помощью [Chocolatey](https://chocolatey.org/packages/Bat): ```bash choco install bat ``` #### С помощью Scoop Вы можете установить `bat` с помощью [scoop](https://scoop.sh/): ```bash scoop install bat ``` Для этого у вас должен быть установлен [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads). #### Из заранее скомпилированных файлов: Их вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases), Для этого у вас должен быть установлен [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads). ### С помощью Docker Вы можете использовать [Docker image](https://hub.docker.com/r/danlynn/bat/) чтобы запустить `bat` в контейнере: ```bash docker pull danlynn/bat alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat' ``` ### С помощью Ansible Вы можете установить `bat` с [Ansible](https://www.ansible.com/): ```bash # Устанавливаем роль на устройстве ansible-galaxy install aeimer.install_bat ``` ```yaml --- # Playbook для установки bat - host: all roles: - aeimer.install_bat ``` - [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat) - [GitHub](https://github.com/aeimer/ansible-install-bat) Этот способ должен сработать со следующими дистрибутивами: - Debian/Ubuntu - ARM (например Raspberry PI) - Arch Linux - Void Linux - FreeBSD - MacOS ### С помощью бинарников Перейдите на [страницу релизов](https://github.com/sharkdp/bat/releases) для скомпилированных файлов `bat` для различных платформ. Бинарные файлы со статической связкой так-же доступны - выбирайте архив с `musl` в имени. ### Из исходников Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.40 или выше. После этого, вы должны использовать `cargo` чтобы все скомпилировать: ```bash cargo install --locked bat ``` ## Кастомизация ### Темы для выделения текста Используйте `bat --list-themes` чтобы вывести список всех доступных тем. Для выбора темы `TwoDark`, используйте `bat` с флагом `--theme=TwoDark` или поставьте переменную окружения `BAT_THEME` равной `TwoDark`. Используйте `export BAT_THEME="TwoDark"` в стартап файле вашей оболочки, чтобы изменить ее навсегда. Или же, используйте [конфиг файл](https://github.com/sharkdp/bat#configuration-file) `bat`. Если вы хотите просто просмотреть темы, используйте следующую команду (для этого вам понадобится [`fzf`](https://github.com/junegunn/fzf)): ```bash bat --list-themes | fzf --preview="bat --theme={} --color=always /путь/к/файлу" ``` `bat` отлично смотрится на темном фоне. Однако, если ваш терминал использует светлую тему, такие темы как `GitHub` или `OneHalfLight` будут смотреться куда лучше! Вы так-же можете использовать новую тему, для этого перейдите [в раздел добавления тем](https://github.com/sharkdp/bat#добавление-новых-тем). ### Изменение внешнего вывода Вы можете использовать флаг `--style` чтобы изменять внешний вид вывода в `bat`. Например, вы можете использовать `--style=numbers,changes`, чтобы показать только количество строк и изменений в Git. Установите переменную окружения `BAT_STYLE` чтобы изменить это навсегда, или используйте [конфиг файл](https://github.com/sharkdp/bat#configuration-file) `bat`. ### Добавление новых синтаксисов `bat` использует [`syntect`](https://github.com/trishume/syntect/) для выделения синтаксиса. `syntect` может читать [файл `.sublime-syntax`](https://www.sublimetext.com/docs/3/syntax.html) и темы. Чтобы добавить новый синтаксис, сделайте следующее: Создайте каталог с синтаксисом: ```bash mkdir -p "$(bat --config-dir)/syntaxes" cd "$(bat --config-dir)/syntaxes" # Разместите файлы '.sublime-syntax' # в каталоге (или субкаталогах), например: git clone https://github.com/tellnobody1/sublime-purescript-syntax ``` Теперь, используйте следующую команду, чтобы превратить эти файлы в бинарный кеш: ```bash bat cache --build ``` Теперь, вы можете использовать `bat --list-languages` чтобы проверить, доступны ли новые языки. Если когда-нибудь вы заходите вернуться к настройкам по-умолчанию, введите ```bash bat cache --clear ``` ### Добавление новых тем Это работает похожим образом, так-же как и добавление новых тем выделения синтаксиса Во-первых, создайте каталог с новыми темами для синтаксиса: ```bash mkdir -p "$(bat --config-dir)/themes" cd "$(bat --config-dir)/themes" # Загрузите тему в формате '.tmTheme': git clone https://github.com/greggb/sublime-snazzy # Обновите кеш bat cache --build ``` Теперь, используйте `bat --list-themes` чтобы проверить доступность новых тем. ### Использование другого пейджера. `bat` использует пейджер, указанный в переменной окружения `PAGER`. Если она не задана, то используется `less`. Если вы желаете использовать другой пейджер, вы можете либо изменить переменную `PAGER`, либо `BAT_PAGER` чтобы перезаписать то, что указано в `PAGER`. Чтобы передать какие-то аргументы в ваш пейджер, вы так-же можете их поставить в этих переменных: ```bash export BAT_PAGER="less -RF" ``` Так-же вы можете использовать [файл конфигурации](https://github.com/sharkdp/bat#configuration-file) `bat` для изменения. (флаг `--pager`). **Внимание**: По умолчанию, пейджером является`less` (без каких либо аргументов), `bat` задаст следующие флаги для пейджера: `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` и `-X`/`--no-init`. Последний флаг(`-X`) используется только для `less`, чья версия раньше 530. Флаг `-R` нужен чтобы корректно воспроизвести ANSI цвета. Второй флаг (`-F`) говорит `less` чтобы тот сразу-же завершился, если размер вывода меньше чем вертикальный размер терминала. Это удобно для небольших файлов, т.к вам не надо каждый раз нажимать `q` чтобы выйти из пейджера. Третий флаг (`-X`) нужен чтобы исправить баг с `--quit-if-one-screen` в старых версиях `less`. К сожалению, это так-же блокирует возможность использования колеса мышки. Если вы хотите все же его включить, вы можете добавить флаг `-R`. Для `less` новее чем 530, оно должно работать из коробки. ### Темная тема Если вы используете темный режим в macOS, возможно вы захотите чтобы `bat` использовал другую тему, основанную на теме вашей ОС. Следующий сниппет использует тему `default`, когда у вас включен темный режим, и тему `GitHub`, когда включен светлый. ```bash alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)" ``` ## Файл конфигурации `bat` так-же может быть кастомизирован с помощью файла конфигурации. Его местоположение зависит от вашей ОС, чтобы посмотреть его путь, введите ``` bat --config-file ``` Так-же вы можете установить переменную окружения `BAT_CONFIG_PATH` чтобы изменить путь к файлу конфигурации. ```bash export BAT_CONFIG_PATH="/path/to/bat.conf" ``` Файл конфигурации по-умолчанию может быть создан с помощью флага `--generate-config-file`. ```bash bat --generate-config-file ``` ### Формат Файл конфигурации - это всего лишь набор аргументов. Введите `bat --help`, чтобы просмотреть список всех возможных флагов и аргументов. Также вы можете закомментировать строку с помощью `#`. Пример файла конфигурации: ```bash # Устанавливает тему "TwoDark" --theme="TwoDark" # Показывает количество строк, изменений в Git и заголовок файла --style="numbers,changes,header" # Использует наклонный текст (не все терминалы поддерживаеются) --italic-text=always # Использует синтаксис C++ для всех .ino файлов --map-syntax "*.ino:C++" # Использует синтаксик Git Ignore для всех файлов .ignore --map-syntax ".ignore:Git Ignore" ``` ## Использование `bat` в Windows `bat` полностью работоспособен "из коробки", но для некоторых возможностей могут понадобиться дополнительные настройки. ### Пейджинг Windows поддерживает только очень простой пейджер `more`. Вы можете скачать установщик для `less` [с его сайта](http://www.greenwoodsoftware.com/less/download.html) или [через Chocolatey](https://chocolatey.org/packages/Less). Чтобы его использовать, скопируйте исполняемый файл в ваш `PATH` или [используйте переменную окружения](#Использование-другого-пейджера). [Пакет из Chocolatey](#windows) установит все автоматически. ### Цвета Windows 10 поддерживает цвета и в`conhost.exe` (Command Prompt) и в PowerShell начиная с версии Windows [v1511](https://ru.wikipedia.org/wiki/Windows_10#Обновления и поддержка), так-же как и в bash. На ранних версиях Windows, вы можете использовать [Cmder](http://cmder.net/), в котором есть [ConEmu](https://conemu.github.io/). **Внимание:** Версия `less` в Git и MSYS2 воспроизводит цвета некорректно. Если у вас нет других пейджеров, мы можете отключить использование пейджеров с помощью флага `--paging=never` или установить `BAT_PAGER` равным пустой строке. ### Cygwin `bat` не поддерижвает нативно пути в стиле Unix (`/cygdrive/*`). Когда указан абсолютный путь cygwin, `bat` выдаст следующую ошибку: `The system cannot find the path specified. (os error 3)` Она может быть решена, добавлением следующей функции в `.bash_profile`: ```bash bat() { local index local args=("$@") for index in $(seq 0 ${#args[@]}) ; do case "${args[index]}" in -*) continue;; *) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";; esac done command bat "${args[@]}" } ``` ## Проблемы и их решение ### Терминалы и цвета `bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована к 8-битным цветам, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...). Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов. Удостовертесь, что переменная `COLORTERM` равна`truecolor` или `24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные). ### Текст и номера строк плохо видны Используйте другую тему (смотрите `bat --list-themes` чтобы увидеть все темы). Темы `OneHalfDark` и `OneHalfLight` имеют более яркие номера строк и тексты. ### Кодировки файлов `bat` поддерживает UTF-8 и UTF-16. Для другой кодировки, вам возможно будет нужно перекодировать их, так как кодировка может быть распознана не верно. Используйте `iconv`. Пример: у вас есть PHP файл в кодировке Latin-1 (ISO-8859-1): ``` bash iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat ``` Внимание: вам может понадобится флаг `-l`/`--language` если синтаксис не смог быть авто-определен `bat`. ## Разработка ```bash # Рекурсивно клонирует все модули git clone --recursive https://github.com/sharkdp/bat # Компиляции в режиме разработки cd bat cargo build --bins # Запуск тестов cargo test # Установка (релизная версия) cargo install --locked #Компилирование исполняего файла bat с другим синтаксисом и темами bash assets/create.sh cargo install --locked --force ``` ## Разработчики - [sharkdp](https://github.com/sharkdp) - [eth-p](https://github.com/eth-p) ## Цели и альтернативы `bat` старается добится: - Красивый, продвинутый синтаксис. - Интеграция с Git - Быть заменой `cat` - Предлагать дружелюбный интерфейс и аргументы. Есть очень много альтернатив `bat`. Смотрите [этот документ](doc/alternatives.md) для сравнения. ## Лицензия Copyright (c) 2018-2020 [Разработчики bat](https://github.com/sharkdp/bat). `bat` распостраняется под лицензями MIT License и Apache License 2.0. Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.