シンタックスハイライトとGitとの連携機能付きの cat(1) クローン。
特徴 • 使い方 • インストール • カスタマイズ • プロジェクトの目標と既存の類似したOSS • 翻訳 [中文][日本語][한국어]
bat
は多くのプログラミング言語やマークアップ言語の
シンタックスハイライトに対応しています:
bat
は git
とも連携しており、差分を表現する記号が表示されます
(図の左端):
-A
/--show-all
オプションをつけることで
印刷できない文字を可視化できます:
出力が1つの画面に対して大きすぎる場合、bat
は自身の出力をページャー(例えば less
) にパイプで繋げます。
あなたはさらにファイルを連結させるために使うことも可能です:wink:。
bat
は非対話型のターミナルを検出すると(すなわち他のプロセスにパイプしたりファイル出力していると)、
bat
は cat
の完全互換として振る舞い、
プレーンなファイルを表示します。
単一のファイルを表示させたい場合
> bat README.md
複数のファイルを一度に表示させたい場合
> bat src/*.rs
標準入力から自動的に構文を決定させたい場合(ハイライトされるのは、
たいていは #!/bin/sh
のようなシバンを利用して、
ファイルの一行目から構文を決定できる場合のみです)
> curl -s https://sh.rustup.rs | bat
標準入力から明示的に言語を指定したい場合
> yaml2json .travis.yml | json_pp | bat -l json
空白文字を可視化させたい場合:
> bat -A /etc/hosts
cat
の代わりに bat
を使用する際の例:
bat > note.md # quickly create a new file
bat header.md content.md footer.md > document.md
bat -n main.rs # show line numbers (only)
bat f - g # output 'f', then stdin, then 'g'.
find
の -exec
オプションを使用して、bat
ですべての検索結果をプレビューできます:
find … -exec bat {} +
fd
を使用している場合は、-X
/-exec-batch
オプションを使用して同じことを行うことができます:
fd … -X bat
batgrep
では、ripgrep
検索結果のプリンターとして bat
を使用できます。
batgrep needle src/
bat
を tail -f
と組み合わせて、構文強調表示を使用して特定のファイルを継続的に監視できます。
tail -f /var/log/pacman.log | bat --paging=never -l log
注意事項:tail -f
と組み合わせるには、ページングをオフにしなければなりません。また、この場合は構文が自動検出されないため、明示的に指定(-l log
)しています。
bat
を git show
と組み合わせて、
適切な構文強調表示を使用して特定のファイルの古いバージョンを表示できます:
git show v0.6.0:src/main.rs | bat -l rs
差分内の構文強調表示は現在サポートされていないことに注意してください。 これを探しているなら、delta
をチェックしてください。
bat
の出力の行番号と Git 変更マーカーにより、ファイルの内容をコピーするのが難しくなる場合があります。
これを防ぐには、-p
/ -plain
オプションを使用して bat
を呼び出すか、
単に出力を xclip
にパイプします:
bat main.cpp | xclip
bat
は出力がリダイレクトされていることを検出し、プレーンファイルの内容を出力します。
bat
は MANPAGER
環境変数を設定することにより、
man
の色付けページャーとして使用できます:
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man 2 select
フォーマットの問題が発生した場合は
MANROFFOPT="-c"
を設定する必要もあります。
これを新しいコマンドにバンドルしたい場合は batman
も使用できます。
Manpage syntax はこのリポジトリで開発されており、まだ作業が必要であることに注意してください。
prettybat
スクリプトは、コードをフォーマットし、bat
で印刷するラッパーです。
... や他のDebianベースのLinuxディストリビューション
Ubuntu Eoan 19.10 または Debian 不安定版 sid 以降の the Ubuntu bat
package または the Debian bat
package からインストールできます:
apt install bat
apt
を使用して bat
をインストールした場合、実行可能ファイルの名前が bat
ではなく batcat
になることがあります(他のパッケージとの名前衝突のため)。bat -> batcat
のシンボリックリンクまたはエイリアスを設定することで、実行可能ファイル名が異なることによる問題の発生を防ぎ、他のディストリビューションと一貫性を保てます。
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
*... や他のDebianベースのLinuxディストリビューション
batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、release page から最新の .deb
パッケージをダウンロードし、
次の方法でインストールします:
sudo dpkg -i bat_0.16.0_amd64.deb # adapt version number and architecture
適切なリポジトリが有効になっている場合は、
公式のソースから bat
package をインストールできます:
apk add bat
Arch Linuxの公式リソース からインストールできます。
pacman -S bat
公式の Fedora Modular リポジトリから the bat
package をインストールできます。
dnf install bat
公式ソースから
the bat
package をインストールできます。
emerge sys-apps/bat
xbps-install経由で bat
をインストールできます。
xbps-install -S bat
pkg を使用してプリコンパイルされた bat
package をインストールできます:
pkg install bat
または FreeBSD ポートから自分でビルドすることもできます:
cd /usr/ports/textproc/bat
make install
bat
を nix package manager 経由でインストールすることができます:
nix-env -i bat
bat
をzypperでインストールすることができます:
zypper install bat
Homebrewで bat
をインストールできます:
brew install bat
または MacPorts で bat
をインストールします:
port install bat
Windowsにbatをインストールするいくつかのオプションがあります。 batをインストールしたら Windowsでのbatの使用 セクションをご覧ください。
Chocolatey から bat
をインストールできます:
choco install bat
scoop から bat
をインストールできます:
scoop install bat
Visual C ++再頒布可能 パッケージをインストールする必要があります。
リリースページ からビルド済みのバイナリをダウンロードできます。
Visual C ++再頒布可能 パッケージをインストールする必要があります。
コンテナ内で bat
を使いたい方のために Docker image が用意されています:
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 でインストールすることができます:
# Install role on local machine
ansible-galaxy install aeimer.install_bat
---
# Playbook to install bat
- host: all
roles:
- aeimer.install_bat
これは以下のディストリビューションで動作するはずです:
- Debian/Ubuntu
- ARM (eg. Raspberry PI)
- Arch Linux
- Void Linux
- FreeBSD
- MacOS
多くの異なるアーキテクチャのためのプレビルドバージョンをリリースページからチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に musl
を含むアーカイブを探してみてください。
bat
をソースからビルドしたいならば、Rust 1.36 以上の環境が必要です。
cargo
を使用してビルドすることができます:
cargo install --locked bat
一部のプラットフォームでは llvm
および/または libclang-dev
のインストールが必要になる場合があります。
bat --list-themes
を使うと現在利用可能なシンタックスハイライトのテーマを入手できます。
TwoDark
テーマを選ぶためには
--theme=TwoDark
オプションをつけるか BAT_THEME
という環境変数に
TwoDark
を代入する必要があります。 シェルの起動ファイルに export BAT_THEME="TwoDark"
と定義すればその設定が変わることはないでしょう。あるいは、 bat
の
設定ファイルを利用してください。
カスタムファイルでさまざまなテーマをプレビューする場合は、
次のコマンドを使用できます(これには fzf
が必要です)。
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
bat
はデフォルトだと黒い背景色のターミナルに適しています。
しかし、GitHub
や OneHalfLight
のような白い背景色のテーマでもいい感じにすることができます。
'新しいテーマの追加' セクションに従って
カスタムテーマを使用することもできます。
--style
を使うことで bat
の表示の見た目を変更することができます。
例えば、 --style=numbers,changes
と入力します。
すると、Gitの差分と行番号だけが表示され、グリッド線とファイルヘッダーは表示されません。
環境変数に BAT_STYLE
を定義するとこれらの設定を永続的に使用することができます。
設定ファイル を参考にしても良いでしょう。
bat
はシンタックスハイライトのための syntext
という素晴らしいライブラリを使用しています。syntect
は、
Sublime Text の .sublime-syntax
ファイル
とテーマを読み取ることができます。新しい構文を定義するために以下の手順を行います。
構文定義ファイルを入れておくためのフォルダを作ります:
mkdir -p "$(bat --config-dir)/syntaxes"
cd "$(bat --config-dir)/syntaxes"
# Put new '.sublime-syntax' language definition files
# in this folder (or its subdirectories), for example:
git clone https://github.com/tellnobody1/sublime-purescript-syntax
次のコマンドを使用して、これらのファイルをバイナリキャッシュに解析します:
bat cache --build
最後に bat --list-languages
と入力すると新しい言語が利用可能かどうかチェックします。
デフォルトの設定に戻したいときは以下のコマンドを実行します:
bat cache --clear
これは構文を新しく定義するやり方と非常に似ています。
まず、新しいシンタックスハイライトのテーマのフォルダを作ります:
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
# Download a theme in '.tmTheme' format, for example:
git clone https://github.com/greggb/sublime-snazzy
# Update the binary cache
bat cache --build
最後に、 bat --list-themes
で新しいテーマが利用可能かチェックします
bat
は環境変数 PAGER
に使用するページャーを明記します。
この環境変数が定義されていない場合、デフォルトで less
が使用されます。
もし、異なるページャーを使用したい場合は、PAGER
を修正してください。
または、PAGER
を上書きする環境変数として BAT_PAGER
を定義することも可能です。
もし、ページャーにコマンドライン引数を渡したい場合は、
PAGER
/BAT_PAGER
環境変数を定義してください:
export BAT_PAGER="less -RF"
環境変数を利用する代わりに、 bat
の 設定ファイル を使用して設定も可能です(--pager
オプション)
注意: デフォルトにより、ページャーが less
にセットされているならば
bat
はページャーの以下のコマンドラインオプション を受け付けるでしょう:
-R
/--RAW-CONTROL-CHARS
, -F
/--quit-if-one-screen
そして -X
/--no-init
。
最後のオプション(-X)は、530 より古いバージョンにのみ使用されます。
-R
オプションは、ANSIカラーを正しく解釈するために必要です。
2番目のオプション(-F
)は、出力サイズが端末の垂直サイズよりも小さい場合、すぐに終了するようにlessに指示します。
これは、ページャーを終了するために q
を押す必要がないため、小さなファイルに便利です。
3番目のオプション(-X
)は、less
の古いバージョンの --quit-if-one-screen
機能のバグを修正するために必要です。
残念ながら、less
のマウスホイールのサポートも少なくなります。
less
の古いバージョンでマウスホイールのスクロールを有効にしたい場合は、
-R
だけを渡すことができます(上記の例のように、これは1画面終了機能を無効にします)。
530以下の場合は、そのまま使用できます。
macOSでダークモード機能を使用する場合、OSテーマに基づいて異なるテーマを使用するように bat
を構成することができます。
次のスニペットは、ライトモードの場合は デフォルト
のテーマを使用し、
ダークモードの場合は GitHub
テーマを使用します。
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
bat
は設定ファイルでカスタマイズすることが可能です。ファイルの場所はOSに依存します。
使用しているOSのデフォルトパスを調べるには以下のコマンドを実行してください:
bat --config-file
または、BAT_CONFIG_PATH
環境変数を使用して、bat
が
構成ファイルのデフォルト以外の場所を指すようにすることができます:
export BAT_CONFIG_PATH="/path/to/bat.conf"
この設定ファイルはコマンドライン引数の単純なリストです。 bat --help
を利用すると、利用可能なオプションとその値を閲覧することができます。さらに、#
でコメント文を加えることができます。
設定ファイルの例:
# Set the theme to "TwoDark"
--theme="TwoDark"
# Show line numbers, Git modifications and file header (but no grid)
--style="numbers,changes,header"
# Use italic text on the terminal (not supported on all terminals)
--italic-text=always
# Use C++ syntax for .ino files
--map-syntax "*.ino:C++"
# Use ".gitignore"-style highlighting for ".ignore" files
--map-syntax ".ignore:Git Ignore"
Windows 上で bat
はほとんど動作しますが、いくつかの機能は設定を必要をする場合があります。
Windowsには、more
形式の非常に限られたページャーしか含まれていません。
less
用のWindowsバイナリは、ホームページ または
Chocolatey からダウンロードできます。
これを使用するには、バイナリを PATH
のディレクトリに配置するか、環境変数を定義します。Chocolateyパッケージ は less
を自動的にインストールします。
Windows 10では、conhost.exe
(コマンドプロンプト)と
v1511 以降の PowerShell の両方、
およびbashの新しいバージョンの色がネイティブにサポートされています。 以前のバージョンのWindowsでは、
ConEmu を含む Cmder を使用できます。
注意: Git と MSYS の less
はWindows上で色を正しく解釈しません。
もし、あなたが他のページャーをインストールしていないのであれば、 --paging=never
オプションを付け加えるか
BAT_PAGER
に空文字を設定することでページングを完全に無効にできます。
Windows上の bat
は Cygwin のunix風のpath(/cygdrive/*
)をネイティブサポートしていません。絶対的なcygwinパスを引数として受けたときに、 bat
は以下のエラーを返すでしょう: The system cannot find the path specified. (os error 3)
wrapperを作成するか、以下の関数を .bash_profile
に追記することで、この問題を解決することができます:
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
はターミナルがトゥルーカラーをサポートしている/していないに関係なくサポートします。
しかし、シンタックスハイライトのテーマの色が8-bitカラーに最適化されていない場合、
24-bitであるトゥルーカラーをサポートしているターミナルを使用することを強く推奨します(terminator
, konsole
, iTerm2
, ...)。
この 記事 には
24-bitカラーがサポートされているターミナルの一覧が掲載されています。
本当の色をターミナルにセットするために、環境変数 COLORTERM
に truecolor
か
24bit
のどちらかを代入してください。さもなければ、bat
はどの色を使うのか決定することができません。または、24-bit エスケープシーケンスがサポートされません
(そして、8-bit colorに戻ります)。
異なるテーマを試してみてください(bat --list-themes
でテーマを閲覧できます)。
OneHalfDark
と OneHalfLight
テーマはグリッド線と線の色を明るくします。
bat
は UTF-16 と同様に UTF-8 をネイティブにサポートします。
他のすべてのファイルエンコーディングでは、エンコーディングは通常自動検出できないため、最初に UTF-8 に変換する必要があります。
これを行うには iconv
を使用できます。
例: Latin-1(ISO-8859-1)エンコーディングの PHP ファイルがある場合、次のように呼び出すことができます:
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
注: bat
が構文を自動検出できない場合は
-l
/ -language
オプションを使用する必要がある場合があります。
# Recursive clone to retrieve all submodules
git clone --recursive https://github.com/sharkdp/bat
# Build (debug version)
cd bat
cargo build --bins
# Run unit tests and integration tests
cargo test
# Install (release version)
cargo install --locked
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install --locked --force
bat
は以下の目標を達成しようと試みています:
- 美しく高度なシンタックスハイライトの提供
- ファイルの差分を表示するためのGitとの連携
- (POSIX)
cat
との完全互換 - ユーザーフレンドリーなコマンドラインインターフェースの提供
あなたが同様のプログラムを探しているなら、多くの選択肢があります。 比較については このドキュメント を参照してください。
Copyright (c) 2018-2020 bat-developers.
bat
は MIT License 及び Apache License 2.0 の両方の条件の下で配布されています。
ライセンスの詳細については LICENSE-APACHE 及び LICENSE-MIT ファイルを参照して下さい。