BATCAT(1) General Commands Manual BATCAT(1)
NAME
batcat - a cat(1) clone with syntax highlighting and Git integration.
USAGE
batcat [OPTIONS] [FILE]...
batcat cache [CACHE-OPTIONS] [--build|--clear]
DESCRIPTION
batcat prints the syntax-highlighted content of a collection of FILEs to
the terminal. If no FILE is specified, or when FILE is '-', it reads
from standard input.
batcat supports a large number of programming and markup languages. It
also communicates with git(1) to show modifications with respect to the
git index. batcat automatically pipes its output through a pager (by
default: less).
Whenever the output of batcat goes to a non-interactive terminal, i.e.
when the output is piped into another process or into a file, batcat
will act as a drop-in replacement for cat(1) and fall back to printing
the plain file contents.
OPTIONS
General remarks: Command-line options like '-l'/'--language' that take
values can be specified as either '--language value', '--lan-
guage=value', '-l value' or '-lvalue'.
-A, --show-all
Show non-printable characters like space, tab or newline. Use
'--tabs' to control the width of the tab-placeholders.
--nonprintable-notation <notation>
Specify how to display non-printable characters when using
--show-all.
Possible values:
caret Use character sequences like ^G, ^J, ^@, .. to identify
non-printable characters
unicode
Use special Unicode code points to identify non-printable
characters
-p, --plain
Only show plain style, no decorations. This is an alias for
'--style=plain'. When '-p' is used twice ('-pp'), it also dis-
ables automatic paging (alias for '--style=plain --pag-
ing=never').
-l, --language <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-lan-
guages' to show all supported language names and file extensions.
-H, --highlight-line <N:M>...
Highlight the specified line ranges with a different background
color. For example:
--highlight-line 40
highlights line 40
--highlight-line 30:40
highlights lines 30 to 40
--highlight-line :40
highlights lines 1 to 40
--highlight-line 40:
highlights lines 40 to the end of the file
--highlight-line 30:+10
highlights lines 30 to 40
--file-name <name>...
Specify the name to display for a file. Useful when piping data
to batcat from STDIN when batcat does not otherwise know the
filename. Note that the provided file name is also used for syn-
tax detection.
-d, --diff
Only show lines that have been added/removed/modified with re-
spect to the Git index. Use '--diff-context=N' to control how
much context you want to see.
--diff-context <N>...
Include N lines of context around added/removed/modified lines
when using '--diff'.
--tabs <T>
Set the tab width to T spaces. Use a width of 0 to pass tabs
through directly
--wrap <mode>
Specify the text-wrapping mode (*auto*, never, character). The
'--terminal-width' option can be used in addition to control the
output width.
-S, --chop-long-lines
Truncate all lines longer than screen width. Alias for
'--wrap=never'.
--terminal-width <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'.
-n, --number
Only show line numbers, no other decorations. This is an alias
for '--style=numbers'
--color <when>
Specify when to use colored output. The automatic mode only en-
ables colors if an interactive terminal is detected. Possible
values: *auto*, never, always.
--italic-text <when>
Specify when to use ANSI sequences for italic text in the output.
Possible values: always, *never*.
--decorations <when>
Specify when to use the decorations that have been specified via
'--style'. The automatic mode only enables decorations if an in-
teractive terminal is detected. Possible values: *auto*, never,
always.
-f, --force-colorization
Alias for '--decorations=always --color=always'. This is useful
if the output of batcat is piped to another program, but you want
to keep the colorization/decorations.
--paging <when>
Specify when to use the pager. To disable the pager, use '--pag-
ing=never' or its alias, -P. To disable the pager permanently,
set BAT_PAGER to an empty string. To control which pager is used,
see the '--pager' option. Possible values: *auto*, never, always.
--pager <command>
Determine which pager is used. This option will override the
PAGER and BAT_PAGER environment variables. The default pager is
'less'. To control when the pager is used, see the '--paging' op-
tion. Example: '--pager "less -RF"'.
Note: By default, if the pager is set to 'less' (and no command-
line options are specified), 'bat' will pass the following com-
mand line options to the pager: '-R'/'--RAW-CONTROL-CHARS',
'-F'/'--quit-if-one-screen' and '-X'/'--no-init'. The last option
('-X') is only used for 'less' versions older than 530. The '-R'
option is needed to interpret ANSI colors correctly. The second
option ('-F') instructs less to exit immediately if the output
size is smaller than the vertical size of the terminal. This is
convenient for small files because you do not have to press 'q'
to quit the pager. The third option ('-X') is needed to fix a bug
with the '--quit-if-one-screen' feature in old versions of
'less'. Unfortunately, it also breaks mouse-wheel support in
'less'. If you want to enable mouse-wheel scrolling on older ver-
sions of 'less', you can pass just '-R' (as in the example above,
this will disable the quit-if-one-screen feature). For less 530
or newer, it should work out of the box.
-m, --map-syntax <glob-pattern:syntax-name>...
Map a glob pattern to an existing syntax name. The glob pattern
is matched on the full path and the filename. For example, to
highlight *.build files with the Python syntax, use -m
'*.build:Python'. To highlight files named '.myignore' with the
Git Ignore syntax, use -m '.myignore:Git Ignore'. Note that the
right-hand side is the *name* of the syntax, not a file exten-
sion.
--ignored-suffix <ignored-suffix>
Ignore extension. For example: 'bat --ignored-suffix ".dev"
my_file.json.dev' will use JSON syntax, and ignore '.dev'
--theme <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="...").
Special values:
auto (default)
Picks a dark or light theme depending on the terminal's
colors. Use --theme-light and --theme-dark to customize
the selected theme.
auto:always
Variation of auto where where the terminal's colors are
detected even when the output is redirected.
auto:system (macOS only)
Variation of auto where the color scheme is detected from
the system-wide preference instead.
dark Use the dark theme specified by --theme-dark.
light Use the light theme specified by --theme-light.
--theme-dark <theme>
Sets the theme name for syntax highlighting used when the termi-
nal uses a dark background. To set a default theme, add the
--theme-dark="..." option to the configuration file or export the
BAT_THEME_DARK environment variable (e.g. export
BAT_THEME_DARK="..."). This option only has an effect when
--theme option is set to auto or dark.
--theme-light <theme>
Sets the theme name for syntax highlighting used when the termi-
nal uses a dark background. To set a default theme, add the
--theme-dark="..." option to the configuration file or export the
BAT_THEME_LIGHT environment variable (e.g. export
BAT_THEME_LIGHT="..."). This option only has an effect when
--theme option is set to auto or light.
--list-themes
Display a list of supported themes for syntax highlighting.
-s, --squeeze-blank
Squeeze consecutive empty lines into a single empty line.
--squeeze-limit <squeeze-limit>
Set the maximum number of consecutive empty lines to be printed.
--style <style-components>
Configure which elements (line numbers, file headers, grid bor-
ders, 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: *de-
fault*, full, auto, plain, changes, header, header-filename,
header-filesize, grid, rule, numbers, snip.
-r, --line-range <N:M>...
Only print the specified range of lines for each file. For exam-
ple:
--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
--line-range 30:+10
prints lines 30 to 40
-L, --list-languages
Display a list of supported languages for syntax highlighting.
-u, --unbuffered
This option exists for POSIX-compliance reasons ('u' is for 'un-
buffered'). The output is always unbuffered - this option is sim-
ply ignored.
--no-custom-assets
Do not load custom assets.
--config-dir
Show bat's configuration directory.
--cache-dir
Show bat's cache directory.
--diagnostic
Show diagnostic information for bug reports.
--acknowledgements
Show acknowledgements.
--set-terminal-title
Sets terminal title to filenames when using a pager.
-h, --help
Print this help message.
-V, --version
Show version information.
POSITIONAL ARGUMENTS
<FILE>...
Files to print and concatenate. Use a dash ('-') or no argument
at all to read from standard input.
SUBCOMMANDS
cache - Modify the syntax-definition and theme cache.
FILES
batcat can also be customized with a configuration file. The location of
the file is dependent on your operating system. To get the default path
for your system, call:
batcat --config-file
Alternatively, you can use the BAT_CONFIG_PATH environment variable to
point batcat to a non-default location of the configuration file.
To generate a default configuration file, call:
batcat --generate-config-file
These are related options:
--config-file
Show path to the configuration file.
--generate-config-file
Generates a default configuration file.
--no-config
Do not use the configuration file.
ADDING CUSTOM LANGUAGES
batcat supports Sublime Text .sublime-syntax language files, and can be
customized to add additional languages to your local installation. To do
this, add the .sublime-syntax language files to `$(batcat --config-
dir)/syntaxes` and run `batcat cache --build`.
Example:
mkdir -p "$(batcat --config-dir)/syntaxes"
cd "$(batcat --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
# And then build the cache.
batcat cache --build
Once the cache is built, the new language will be visible in `batcat
--list-languages`.
If you ever want to remove the custom languages, you can clear the cache
with `batcat cache --clear`.
ADDING CUSTOM THEMES
Similarly to custom languages, batcat supports Sublime Text .tmTheme
themes. These can be installed to `$(batcat --config-dir)/themes`, and
are added to the cache with `batcat cache --build`.
INPUT PREPROCESSOR
Much like less(1) does, batcat supports input preprocessors via the
LESSOPEN and LESSCLOSE environment variables. In addition, batcat at-
tempts to be as compatible with less's preprocessor implementation as
possible.
To use the preprocessor, call:
batcat --lessopen
Alternatively, the preprocessor may be enabled by default by adding the
'--lessopen' option to the configuration file.
To temporarily disable the preprocessor if it is enabled by default,
call:
batcat --no-lessopen
These are related options:
--lessopen
Enable the $LESSOPEN preprocessor.
--no-lessopen
Disable the $LESSOPEN preprocessor if enabled (overrides
--lessopen)
For more information, see the "INPUT PREPROCESSOR" section of less(1).
MORE INFORMATION
For more information and up-to-date documentation, visit the batcat
repo:
https://github.com/sharkdp/bat
BATCAT(1)
Generated by dwww version 1.16 on Fri Aug 14 20:55:32 CEST 2026.