シンタックスハイライトもしてくれるcatの拡張ライブラリ!bat

シンタックスハイライトもしてくれるcatの拡張ライブラリ!bat

Rust製のcatを便利にしたコマンド、bat。

batのGitHubページ


公式READMEに記載されている通り、

シンタックスハイライト・Gitの差分が分かる機能をcatに追加したものです。

bat/README-ja.md at master · sharkdp/bat


cat と違い長いファイルの場合は less のようにページャーが自動で表示されるのも便利なポイント ☺️


この記事では bat の使い方、設定方法などを記載します。

検証した環境

1 bat 0.22.1

インストール

Macを使っている人はhomebrewで簡単にインストール出来ます!

$ brew install bat

それ以外のインストール方法は公式GitHubを参考に

sharkdp/bat: A cat(1) clone with wings.


私が行っている設定

batの内容はだいたい知ってる人向けに、先に私が行っている設定を記載します。

aliasの設定

好みの問題もありますが、cat・less と置き換えてしまっても遜色ないためaliasでcat・less使用時に bat が呼び出されるようにしています。

~/.zshrc
alias cat="bat"
alias less="bat"


この設定をすると

  • 元のcat・lessが簡単には使えなくなる
    • /bin/cat README.md のようにすれば使える
  • batがインストールされていないとcat・lessコマンドが機能しなくなる

点に注意です!



テーマの設定

batにはシンタックスハイライトのテーマが複数用意されています。

(テーマの確認方法は後述)

BAT_THEMEという環境変数にテーマ名を指定する事で、

自分の好きなテーマをデフォルトで使用するように設定出来ます

~/.zshrc
export BAT_THEME="Dracula"

Draculaに変更後
themeをDraculaに変更した後


使い方

シンタックスを有効にしてファイルの確認

batを利用する上で1番重要な部分!

とても簡単で、catと同じようにファイル名を指定するだけでシンタックスが有効になります!

$ bat screenshot.js

batを利用する事でシンタックスハイライトが有効になる
puppeteerというライブラリのexamples/screenshot.jsの内容

手軽にシンタックス効いてくれるのは最高ですね ☺️



複数ファイルの確認

引数に複数のファイルを指定

# 複数ファイルを同時に確認
$ bat screenshot.js search.js

もしくは*を使って拡張子やファイル名指定も可能

$ bat *.js



対応言語

batはかなりの数の言語に対応してます。

# 対応言語の確認
$ bat --list-languages
batの対応言語・拡張子の一部

上記は対応している言語・拡張子のごくごく一部

私は聞いた事のないものが沢山ありました。笑


「自分の使っている言語にはシンタックスハイライトしてくれないんじゃないか…?」という心配はまずしなくて大丈夫そうです。


オプション

batはデフォルトでキレイな見た目にしてくれるため、オプション使わずとも十分だったりします!

とはいえせっかくなのでいくつかピックアップしてみました。

-A, —show-all

改行コードやタブも表示してくれます。

$ bat -A main.go
-Aオプションを使う事で改行コードやタブも表示させる

せっかくのシンタックスが無効になってしまいますが

厳格な記載が求められる、例えば/etc/hostsには有効という事が公式に記載されてます

$ bat -A /etc/hosts

-H, —highlight-line <N:M>…

指定した行をハイライトします。

$ bat -H 8:9 main.go
-Hで指定した行がハイライト表示される

—style <style-components>

行番号の表示・ファイルサイズの表示・Gitの差分…など、

bat利用時の表示方法を指定出来ます!



良く利用しそうなものをピックアップ

効果
numbers行番号の表示
changesGitの差分状況の表示
header-filenameヘッダーにファイル名を表示
header-filesizeヘッダーにファイル名サイズを表示
gridここまでの画像のようにボーダーで区切って表示
full全部入り



--style=/* 使用したい値 */ のように指定し、値の部分は,区切りで複数指定が出来ます

$ bat --style=changes,header-filesize main.go
--styleでchanges,header-filesizeを指定

$ bat --style=full main.go
--styleでfullを指定

—color <when>

シンタックスハイライトの実行タイミングについて指定が出来ます。


基本このオプションは使わずに問題ないですが、

例えばfzfなど他ライブラリと組み合わせるとシンタックスハイライトが効かないケースがあるため、

そのような場合にこのオプションを使用します!

# fzfの --previewオプション内で使用する場合は --color=always を指定しないとシンタックスハイライトが効かない
$ find * -type f | fzf --preview "bat --color=always --style=header-filename,grid {}"
--colorオプションを指定する事でfzfと組み合わせてもシンタックスハイライトが有効になる

テーマの確認方法

batにはシンタックスハイライトのテーマが複数用意されています!



更にどのテーマがどのような見た目になるか、試す方法まで公式で紹介されています。

至れり尽くせりです。

# テーマの見た目を確認。
# /path/to/file の部分には シンタックスハイライト の確認をするためのファイルパスを指定
$ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
 
# ex: 実行するフォルダ内に main.go がある場合
$ bat --list-themes | fzf --preview="bat --theme={} --color=always main.go"

上記のコマンドを試すためにはfzfが必要になります

# homebrewでfzfをインストールする
$ brew install fzf



あとは

  • 環境変数BAT_THEMEに指定する
  • —themeオプションを使用する

事でテーマの指定が出来ます。


~/.zshrc
# 環境変数でテーマの指定
export BAT_THEME="Dracula"

# --themeオプションでテーマを指定
$ bat --theme="Dracula" main.go
プロフィール画像
Yuki Takara
都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。