bat - a cat clone with wings
Build Status license Version info
A cat(1) clone with syntax highlighting and Git integration.

Key FeaturesHow To UseInstallationCustomizationProject goals, alternatives

Syntax highlighting

bat supports syntax highlighting for a large number of programming and markup languages:

Syntax highlighting example

Git integration

bat communicates with git to show modifications with respect to the index (see left side bar):

Git integration example

Automatic paging

bat can pipe its own output to less if the output is too large for one screen.

File concatenation

Oh.. you can also use it to concatenate files :wink:. Whenever bat detects a non-interactive terminal, it will fall back to printing the plain file contents.

How to use

Display a single file on the terminal

```bash

bat README.md ```

Display multiple files at once

```bash

bat src/*.rs ```

Read from stdin, explicitly specify the language

```bash

yaml2json .travis.yml | json_pp | bat -l json ```

```bash

curl -s https://raw.githubusercontent.com/sharkdp/bat/master/src/main.rs | bat -l rs ```

As a replacement for cat:

```bash 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)

cat f - g # output 'f', then stdin, then 'g'. ```

Installation

From binaries

Check out the Release page for binary builds and Debian packages.

On Arch Linux

You can install the AUR package via yaourt, or manually:

bash git clone https://aur.archlinux.org/bat.git cd bat makepkg -si

On FreeBSD

You can install a precompiled bat package with pkg:

bash pkg install bat

or build it on your own from the FreeBSD ports:

bash cd /usr/ports/textproc/bat make install

On macOS

You can install bat with Homebrew:

bash brew install bat

From source

If you want to build to compile bat from source, you need Rust 1.24 or higher. You can then use cargo to build everything:

bash cargo install bat

On macOS, you might have to install cmake (brew install cmake) in order for some dependencies to be built.

Customization

Highlighting theme

Use bat --list-themes to get a list of all available themes for syntax highlighting. To select the TwoDark theme, for example, call bat with the --theme=TwoDark option. Use alias bat="bat --theme=TwoDark" in your shells startup file to make the change permanent.

Output style

You can use the --style option to control the appearance of bats output. You can use --style=numbers,changes, for example, to show only Git changes and line numbers but no grid and no file header.

Add new syntaxes and highlighting themes

bat uses the excellent syntect library for syntax highlighting. syntect can read any Sublime Text .sublime-syntax file and theme.

To build your own language-set and theme, follow these steps:

Create a folder with a syntax highlighting theme:

```bash BATCONFIGDIR="$(bat cache --config-dir)"

mkdir -p "$BATCONFIGDIR/themes" cd "$BATCONFIGDIR/themes"

Download a theme, for example:

git clone https://github.com/greggb/sublime-snazzy

Create a link for the default theme

ln -sf "sublime-snazzy/Sublime Snazzy.tmTheme" Default.tmTheme ```

Create a folder with language definition files:

```bash mkdir -p "$BATCONFIGDIR/syntaxes" cd "$BATCONFIGDIR/syntaxes"

Download some language definition files, for example:

git clone https://github.com/sublimehq/Packages git clone https://github.com/danro/LESS-sublime ```

Finally, use the following command to parse all these files into a binary cache:

bash bat cache --init

Use bat --list-languages and bat --list-themes to check if all languages and themes are available.

If you ever want to go back to the default settings, call:

bash bat cache --clear

Project goals and alternatives

bat tries to achieve the following goals:

There are a lot of alternatives, if you are looking for similar programs. See this document for a comparison.