← Back to Skills
DevOps

bat-cat

arnarsson By arnarsson 👁 17 views ▲ 0 votes

A cat clone with syntax highlighting, line numbers, and Git integration

GitHub
---
name: bat-cat
description: A cat clone with syntax highlighting, line numbers, and Git integration - a modern replacement for cat.
homepage: https://github.com/sharkdp/bat
metadata: {"clawdbot":{"emoji":"🦇","requires":{"bins":["bat"]},"install":[{"id":"brew","kind":"brew","formula":"bat","bins":["bat"],"label":"Install bat (brew)"},{"id":"apt","kind":"apt","package":"bat","bins":["bat"],"label":"Install bat (apt)"}]}}
---

# bat - Better cat

`cat` with syntax highlighting, line numbers, and Git integration.

## Quick Start

### Basic usage
```bash
# View file with syntax highlighting
bat README.md

# Multiple files
bat file1.js file2.py

# With line numbers (default)
bat script.sh

# Without line numbers
bat -p script.sh
```

### Viewing modes
```bash
# Plain mode (like cat)
bat -p file.txt

# Show non-printable characters
bat -A file.txt

# Squeeze blank lines
bat -s file.txt

# Paging (auto for large files)
bat --paging=always file.txt
bat --paging=never file.txt
```

## Syntax Highlighting

### Language detection
```bash
# Auto-detect from extension
bat script.py

# Force specific language
bat -l javascript config.txt

# Show all languages
bat --list-languages
```

### Themes
```bash
# List available themes
bat --list-themes

# Use specific theme
bat --theme="Monokai Extended" file.py

# Set default theme in config
# ~/.config/bat/config: --theme="Dracula"
```

## Line Ranges

```bash
# Show specific lines
bat -r 10:20 file.txt

# From line to end
bat -r 100: file.txt

# Start to specific line
bat -r :50 file.txt

# Multiple ranges
bat -r 1:10 -r 50:60 file.txt
```

## Git Integration

```bash
# Show Git modifications (added/removed/modified lines)
bat --diff file.txt

# Show decorations (Git + file header)
bat --decorations=always file.txt
```

## Output Control

```bash
# Output raw (no styling)
bat --style=plain file.txt

# Customize style
bat --style=numbers,changes file.txt

# Available styles: auto, full, plain, changes, header, grid, numbers, snip
bat --style=header,grid,numbers file.txt
```

## Common Use Cases

**Quick file preview:**
```bash
bat file.json
```

**View logs with syntax highlighting:**
```bash
bat error.log
```

**Compare files visually:**
```bash
bat --diff file1.txt
bat file2.txt
```

**Preview before editing:**
```bash
bat config.yaml && vim config.yaml
```

**Cat replacement in pipes:**
```bash
bat -p file.txt | grep "pattern"
```

**View specific function:**
```bash
bat -r 45:67 script.py  # If function is on lines 45-67
```

## Integration with other tools

**As pager for man pages:**
```bash
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man grep
```

**With ripgrep:**
```bash
rg "pattern" -l | xargs bat
```

**With fzf:**
```bash
fzf --preview 'bat --color=always --style=numbers {}'
```

**With diff:**
```bash
diff -u file1 file2 | bat -l diff
```

## Configuration

Create `~/.config/bat/config` for defaults:

```
# Set theme
--theme="Dracula"

# Show line numbers, Git modifications and file header, but no grid
--style="numbers,changes,header"

# Use italic text on terminal
--italic-text=always

# Add custom mapping
--map-syntax "*.conf:INI"
```

## Performance Tips

- Use `-p` for plain mode when piping
- Use `--paging=never` when output is used programmatically
- `bat` caches parsed files for faster subsequent access

## Tips

- **Alias:** `alias cat='bat -p'` for drop-in cat replacement
- **Pager:** Use as pager with `export PAGER="bat"`
- **On Debian/Ubuntu:** Command may be `batcat` instead of `bat`
- **Custom syntaxes:** Add to `~/.config/bat/syntaxes/`
- **Performance:** For huge files, use `bat --paging=never` or plain `cat`

## Common flags

- `-p` / `--plain`: Plain mode (no line numbers/decorations)
- `-n` / `--number`: Only show line numbers
- `-A` / `--show-all`: Show non-printable characters
- `-l` / `--language`: Set language for syntax highlighting
- `-r` / `--line-range`: Only show specific line range(s)

## Documentation

GitHub: https://github.com/sharkdp/bat
Man page: `man bat`
Customization: https://github.com/sharkdp/bat#customization
devops

Comments

Sign in to leave a comment

Loading comments...