Bat: A cat(1) clone with wings
source link: https://www.tuicool.com/articles/hit/MvaQ3uI
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
A cat(1) clone with syntax highlighting and Git integration.
Syntax highlighting
bat
supports syntax highlighting for a large number of programming and markup languages:
Git integration
bat
communicates with git
to show modifications with respect to the index (see left side bar):
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
> bat README.md
Display multiple files at once
> bat src/*.rs
Read from stdin, explicitly specify the language
> yaml2json .travis.yml | json_pp | bat -l json
> curl -s https://raw.githubusercontent.com/sharkdp/bat/master/src/main.rs | bat -l rs
As a replacement for cat
:
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'.
Installation
On Ubuntu
... and other Debian-based Linux distributions.
Download the latest .deb
package from the release page and install it via:
sudo dpkg -i bat_0.6.0_amd64.deb # adapt version number and architecture
On Arch Linux
You can install the bat
package from the official sources:
pacman -S bat
On Void Linux
You can install bat
via xbps-install:
xbps-install -S bat
On FreeBSD
You can install a precompiled bat
package with pkg:
pkg install bat
or build it on your own from the FreeBSD ports:
cd /usr/ports/textproc/bat make install
On macOS
You can install bat
with Homebrew :
brew install bat
From binaries
Check out the Release page for prebuilt versions of bat
for many different architectures.
From source
If you want to build bat
from source, you need Rust 1.26 or higher. You can then use cargo
to build everything:
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, call bat
with the --theme=TwoDark
option or set the BAT_THEME
environment variable to TwoDark
. Use export 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 bat
s output. You can use --style=numbers,changes
, for example, to show only Git changes and line numbers but no grid and no file header.
Adding new syntaxes / language definitions
bat
uses the excellent syntect
library for syntax highlighting. syntect
can read any Sublime Text .sublime-syntax
file and theme. To add new syntax definitions, do the following.
Create a folder with syntax definition files:
BAT_CONFIG_DIR="$(bat cache --config-dir)" 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
Now use the following command to parse these files into a binary cache:
bat cache --init
Finally, use bat --list-languages
to check if the new languages are available.
If you ever want to go back to the default settings, call:
bat cache --clear
Adding new themes
This works very similar to how we add new syntax definitions.
First, create a folder with the new syntax highlighting themes:
BAT_CONFIG_DIR="$(bat cache --config-dir)" 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 --init
Finally, use bat --list-themes
to check if the new themes are available.
Using a different pager
bat
uses the pager that is specified in the PAGER
environment variable. If this variable is not set, less
is used by default. If you want to use a different pager, you can either modify the PAGER
variable or set the BAT_PAGER
environment variable to override what is specified in PAGER
. If you want to pass command-line arguments to the pager, you need to create a small shell script as a wrapper, for example:
#!/bin/bash less --tabs 4 -RF "$@"
Troubleshooting
Terminals & colors
bat
handles terminals with and without truecolor support. However, the colors in the syntax highlighting themes are not optimized for 8-bit colors and it is therefore strongly recommended that you use a terminal with 24-bit truecolor support ( terminator
, konsole
, iTerm2
, ...). See this article for more details and a full list of terminals with truecolor support.
Make sure that your truecolor terminal sets the COLORTERM
variable to either truecolor
or 24bit
. Otherwise, bat
will not be able to determine whether or not 24-bit escape sequences are supported (and fall back to 8-bit colors).
Development
# Recursive clone to retrieve all submodules git clone --recursive https://github.com/sharkdp/bat # Build (debug version) cd bat cargo build # Run unit tests and integration tests cargo test # Install (release version) cargo install # Build a bat binary with modified syntaxes and themes bash assets/create.sh cargo install -f
Project goals and alternatives
bat
tries to achieve the following goals:
cat
There are a lot of alternatives, if you are looking for similar programs. See this document for a comparison.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK