Back to Skills
    🦞

    bat-cat

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

    By @arnarsson
    View on GitHub
    SKILL.md
    ---
    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