catコマンドの替わりにRustで実装されたbatを使う

こんばんは、きろののです。

Rustで実装されたcatの代替コマンドbatが便利そうなので使ってみます。

bat

sharkdp/bat

bat はRustで実装されたcatの代替になるコマンドで、小さなファイルであれば通常のcatのようにすべて表示する。大きなファイルの場合は、lessに渡してページングして表示してくれるので便利。

あとはメジャーなファイル形式のシンタックスハイライトに対応しているので、かなり見やすい。

たとえば batのREADME.md(Markdown形式)のファイルを指定するとこんな感じ。

1
% bat README.md

行番号とシンタックスハイライトを付けて表示してくれます。

インストール

Linuxの場合はapt、 Macの場合はHomebrewで入ります。

Ubuntu:

1
% apt install bat

Mac:

1
% brew install bat

ソースからビルドする場合は、cargo installでビルドします。 詳しくはこちら

1
% cargo install bat

使い方

ほぼ cat と同じように使える。

ファイルを新しく作成してみる:

1
2
3
4
5
6
% bat > file1.md
# test

## subtitle

hello bat.

として file1.md を作成する

1
% bat file1.md

出力スタイルを変える

スタイルを指定する:

style オプションに style components を指定することで表示するコンポーネントを変えることができる。

1
% bat --style=numbers file1.md

git管理されたファイルの変更を表示:

デフォルトでgit管理されたファイルであれば変更のある行をマークしてくれる。

プレーンモード:

cat のようにプレーンな状態で出力することも可能。

1
2
3
4
5
6
7
8
% bat -p file1.md
# test

## subtitle

hello bat.

new line!

ハイライトテーマ

ハイライト表示のためのテーマをいくつかサポートしている。

テーマのリストを表示する:

1
% bat --list-themes

テーマを指定するには、 –theme=TwoDark オプションを使うか、 BAT_THEME 環境変数を使う。

設定ファイル

設定ファイルにも対応している。テーマの指定やデフォルトの出力スタイルは設定ファイルとしておいたほうがよさそう。

設定ファイルの場所を確認:

1
% bat --config-file

または環境変数 BAT_CONFIG_PATH で任意の場所を指定できる。

1
export BAT_CONFIG_PATH="/path/to/bat.conf"

設定ファイルのフォーマットは以下のような感じにする:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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 (instead of C) for .h header files
--map-syntax h:cpp

# Use "gitignore" highlighting for ".ignore" files
--map-syntax .ignore:.gitignore

その他のオプション

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
bat 0.12.1
A cat(1) clone with syntax highlighting and Git integration.

USAGE:
bat [OPTIONS] [FILE]...
bat

OPTIONS:
-l, --language
Explicitly set the language for syntax highlighting. The language can be specified as a
name (like 'C++' or 'LaTeX') or possible file extension (like 'cpp', 'hpp' or 'md'). Use
'--list-languages' to show all supported language names and file extensions.
-L, --list-languages
Display a list of supported languages for syntax highlighting.

-m, --map-syntax ...
Map a file extension or file name to an existing syntax. For example, to highlight
*.conf files with the INI syntax, use '-m conf:ini'. To highlight files named
'.myignore' with the Git Ignore syntax, use '-m .myignore:gitignore'.
--theme
Set the theme for syntax highlighting. Use '--list-themes' to see all available themes.
To set a default theme, add the '--theme="..."' option to the configuration file or
export the BAT_THEME environment variable (e.g.: export BAT_THEME="...").
--list-themes
Display a list of supported themes for syntax highlighting.

--style
Configure which elements (line numbers, file headers, grid borders, Git modifications,
..) to display in addition to the file contents. The argument is a comma-separated list
of components to display (e.g. 'numbers,changes,grid') or a pre-defined style ('full').
To set a default style, add the '--style=".."' option to the configuration file or
export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
values: *auto*, full, plain, changes, header, grid, numbers, snip.
-p, --plain
Only show plain style, no decorations. This is an alias for '--style=plain'. When '-p'
is used twice ('-pp'), it also disables automatic paging (alias for '--style=plain
--pager=never').
-n, --number
Only show line numbers, no other decorations. This is an alias for '--style=numbers'

-A, --show-all
Show non-printable characters like space, tab or newline. This option can also be used
to print binary files. Use '--tabs' to control the width of the tab-placeholders.
-r, --line-range ...
Only print the specified range of lines for each file. For example:
'--line-range 30:40' prints lines 30 to 40
'--line-range :40' prints lines 1 to 40
'--line-range 40:' prints lines 40 to the end of the file
-H, --highlight-line ...
Highlight the N-th line with a different background color

--color
Specify when to use colored output. The automatic mode only enables colors if an
interactive terminal is detected. Possible values: *auto*, never, always.
--italic-text
Specify when to use ANSI sequences for italic text in the output. Possible values:
always, *never*.
--decorations
Specify when to use the decorations that have been specified via '--style'. The
automatic mode only enables decorations if an interactive terminal is detected. Possible
values: *auto*, never, always.
--paging
Specify when to use the pager. To control which pager is used, set the PAGER or
BAT_PAGER environment variables (the latter takes precedence) or use the '--pager'
option. To disable the pager permanently, set BAT_PAGER to an empty string or set
'--paging=never' in the configuration file. Possible values: *auto*, never, always.
--pager
Determine which pager is used. This option will overwrite the PAGER and BAT_PAGER
environment variables. The default pager is 'less'. To disable the pager completely, use
the '--paging' option. Example: '--pager "less -RF"'.
--wrap
Specify the text-wrapping mode (*auto*, never, character). The '--terminal-width' option
can be used in addition to control the output width.
--tabs
Set the tab width to T spaces. Use a width of 0 to pass tabs through directly

-u, --unbuffered
This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is
always unbuffered - this option is simply ignored.
--terminal-width
Explicitly set the width of the terminal instead of determining it automatically. If
prefixed with '+' or '-', the value will be treated as an offset to the actual terminal
width. See also: '--wrap'.
-h, --help
Print this help message.

-V, --version
Show version information.


ARGS:
...
File(s) to print / concatenate. Use a dash ('-') or no argument at all to read from
standard input.

SUBCOMMANDS:
cache Modify the syntax-definition and theme cache

まとめ

シンタックスハイライトしてくれることでカラフルで見やすいし、自動でサイズを判断してlessのような表示にしてくれるので便利だと思いました。

自分の環境では、catをaliasで置き換えてます。

1
alias cat='bat'

ぜひお試しください。

シェア