bat: 58K+ Stars 的语法高亮 cat 替代品 — 2026年对比 cat、less
bat 是带语法高亮和 Git 集成的 cat(1) 克隆。兼容 Rust、Git、Homebrew、Cargo。涵盖安装教程、性能基准测试、配置文件以及与 cat、less、ccat 的对比。
- ⭐ 58940
- Apache-2.0
- 更新于 2026-05-19
{{< resource-info >}}
cat 命令自 1971 年以来一直是类 Unix 系统的默认文件查看工具。它将原始字节输出到 stdout —— 没有颜色、没有行号、没有 Git 感知能力。当你在凌晨 2 点阅读一个 200 行的 Python 文件时,盯着未格式化的文本会增加不必要的认知负担。bat 用语法高亮、Git 集成和自动分页替代了这种四十年的旧工作流 —— 同时不破坏每位终端用户已有的肌肉记忆。
什么是 bat #
bat 是用 Rust 编写的 cat(1) 替代品。它为 200 多种编程语言和标记语言添加语法高亮、自动分页、Git 变更标记、行号、文件标题和主题支持 —— 同时保持与管道兼容的 Unix 工具特性。拥有 58,940 个 GitHub Stars,于 2026 年初发布 0.26.1 版本,它是 Rust 生态系统中应用最广泛的现代 CLI 工具之一。
bat 的工作原理 #
bat 通过终端读取文件,使用文件扩展名和 shebang 行检测语言,通过 syntect 库(Sublime Text 高亮引擎的 Rust 移植版)应用语法高亮,当输出超过终端高度时通过分页器分页显示。

+---------+ +----------------+ +----------------+ +---------+
| 输入 | -> | 语言 | -> | syntect | -> | 分页器 |
| 文件 | | 自动检测 | | 语法高亮 | | (less) |
+---------+ +----------------+ +----------------+ +---------+
| |
v v
文件扩展名匹配 主题选择
Shebang 解析 Git 差异标记
每个用户都应了解的核心概念:
- 语言自动检测:
bat根据文件扩展名(.rs、.py、.md)或 shebang 行(#!/bin/bash)确定语法。 - Syntect 引擎:与 TextMate/Sublime Text 语法定义相同的引擎驱动高亮,因此准确性与现代编辑器相当。
- 分页器委托:默认情况下,当输出超过一屏时,
bat会通过less分页。在非交互式环境(管道到另一个进程)中,它的行为与cat完全一致。 - Git 集成:Git 仓库内的文件会在边栏显示修改标记 —— 新增行显示绿色,修改行显示黄色。
安装与配置 #
在任何主流平台上安装 bat 只需不到两分钟。
macOS (Homebrew) #
brew install bat
# 验证
bat --version
# bat 0.26.1 (e4ae987)
Ubuntu / Debian #
# Ubuntu 22.04+ / Debian 12+
sudo apt install bat
# 某些 Debian/Ubuntu 系统中,二进制文件名为 'batcat' 以避免冲突
# 如需要可创建别名:
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
Arch Linux #
# 官方仓库
sudo pacman -S bat
# 或通过 AUR 助手
yay -S bat
Fedora / RHEL #
sudo dnf install bat
Windows (通过 Scoop) #
scoop install bat
从源码编译 (Cargo) #
# 需要 Rust 1.70+
cargo install --locked bat
# 或克隆并编译
git clone --recursive https://github.com/sharkdp/bat
cd bat
cargo build --release
sudo cp target/release/bat /usr/local/bin/
安装后配置 #
创建配置目录和配置文件:
# 创建配置目录
mkdir -p "$(bat --config-dir)"
# 查看配置文件路径
bat --config-file
# 显示路径,例如 ~/.config/bat/config
编辑配置文件:
# ~/.config/bat/config
--theme="TwoDark"
--style="numbers,changes,header"
--paging=auto
--map-syntax="*.conf:INI"
与主流工具集成 #
Git — 带颜色的文件历史 #
查看指定 Git 版本的文件,享受完整语法高亮:
# 查看指定标签的文件
git show v0.26.1:src/main.rs | bat -l rs
# 查看暂存区的变更(带高亮)
git diff --cached | bat -l diff
fzf — 文件预览 #

bat 可与 fzf 无缝集成作为预览引擎:
# 使用 bat 作为 fzf 预览器
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
# 带预览窗口大小调整
fzf --preview 'bat --color=always {}' --preview-window=right:60%:wrap
添加到你的 .bashrc 或 .zshrc:
# ~/.bashrc
export FZF_DEFAULT_OPTS="--preview 'bat --color=always --style=numbers --line-range=:500 {}'"
man — 语法高亮的帮助手册 #
将 bat 设置为 man 分页器:
# ~/.bashrc 或 ~/.zshrc
export MANPAGER="bat -plman"
# 现在查看手册页将带有语法高亮
man 2 select
man bash
Shell 别名 — 替代 cat #
大多数用户将 cat 别名为 bat 用于交互式会话:
# ~/.bashrc 或 ~/.zshrc
alias cat='bat --paging=never'
# 或在脚本中保留 cat,显式使用 bat
alias b='bat'
对于 zsh 用户,全局别名可以为 --help 输出添加颜色:
# ~/.zshrc
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
tmux — 分屏文件查看器 #
# 在新 tmux 分屏中使用 bat 查看文件
tmux split-window -h "bat src/main.rs"
delta — 增强版 Git Diff #
bat 负责文件查看,delta(同属 Rust CLI 生态)负责差异查看。两者配合使用:
# ~/.gitconfig
[pager]
diff = delta
log = delta
reflog = delta
show = delta
基准测试 / 实际使用场景 #
启动性能 #

由于 Rust 二进制文件启动开销和语法检测成本,bat 比 cat 慢。但对于交互式文件查看,差异几乎察觉不到。在批量处理的紧循环中,请使用 cat。
| 场景 | cat | bat (默认) | bat –plain | bat –no-config |
|---|---|---|---|---|
| 4 字节文件 | 0.001s | 0.14s | 0.10s | 0.08s |
| 100 行 Python | 0.002s | 0.16s | 0.11s | 0.09s |
| 10,000 行 JSON | 0.05s | 0.35s | 0.18s | 0.15s |
| 管道到 wc -l | 0.003s | 0.004s | 0.004s | 0.004s |
在 Linux x86_64、bat 0.26.1、热文件系统缓存上测量。时间为近似值,因硬件而异。
非交互式管道模式 #
当 bat 检测到非交互式终端(管道输出)时,它会自动切换到纯文本模式 —— 与 cat 行为一致:
# bat 在此自动切换到纯文本模式
cat large_file.txt | wc -l
bat large_file.txt | wc -l
# 两者执行速度几乎相同
日常使用场景 #
- 阅读配置文件:
bat /etc/nginx/nginx.conf—— nginx 指令语法高亮,带行号便于引用。 - 代码审查:
bat src/*.rs—— 查看多个 Rust 文件,带文件标题和 Git 变更标记。 - 快速创建文件:
bat > note.md—— 带预览功能的 Markdown 写入。 - 调试:
bat -A /etc/hosts—— 可视化不可打印字符,带颜色编码符号。 - 演示:
bat --style=full --theme=GitHub—— 在屏幕上投射代码,高亮清晰易读。
高级用法 / 生产环境优化 #
自定义主题 #
bat 内置 20 多种主题。列出并预览:
# 列出所有可用主题
bat --list-themes
# 预览特定主题
bat --theme=Solarized\ (dark) --list-themes
# 在配置中设置默认主题
echo '--theme="Dracula"' >> "$(bat --config-file)"
自定义语法定义 #
为 bat 原生不支持的语言添加 Sublime Text .sublime-syntax 文件:
# 创建语法目录
mkdir -p "$(bat --config-dir)/syntaxes"
# 克隆或复制语法定义
cd "$(bat --config-dir)/syntaxes"
git clone https://github.com/tellnobody1/sublime-purescript-syntax
# 重建缓存
bat cache --build
# 验证
bat --list-languages | grep -i purescript
恢复默认设置:
bat cache --clear
为提速禁用功能 #
在脚本中处理数千个文件时,最小化开销:
# 批量处理时最快的 bat 调用方式
bat --no-config --style=plain --paging=never --no-custom-assets file.txt
安全注意事项 #
bat在内存中读取文件;它不会执行代码。- 来自不可信来源的自定义语法定义应经过审计 —— 它们被解析但不会执行。
--diagnostic标志会打印环境变量和配置路径;如果包含敏感路径,请避免在公开的 issue 中分享此输出。
Docker 集成 #
# Dockerfile
FROM alpine:latest
RUN apk add --no-cache bat
ENTRYPOINT ["bat"]
# 构建并使用
docker build -t bat-viewer .
docker run --rm -v $(pwd):/files bat-viewer /files/README.md
与替代品对比 #
| 功能 | bat | cat | less | ccat |
|---|---|---|---|---|
| 语法高亮 | 200+ 种语言 | 无 | 无 | 10+ 种语言 |
| 行号 | 支持 | 无 | 无 | 无 |
| Git 集成 | 变更标记 | 无 | 无 | 无 |
| 自动分页 | 支持 | 无 | 手动 | 无 |
| 管道安全(纯文本模式) | 支持 | 支持 | 不支持 | 支持 |
| 主题支持 | 20+ 主题 | 无 | 无 | 有限 |
| 二进制大小 | ~3.5 MB | ~50 KB | ~120 KB | ~2 MB |
| 启动时间(4B 文件) | ~100 ms | ~1 ms | ~5 ms | ~80 ms |
| 跨平台 | Linux/macOS/Windows/BSD | 通用 | 通用 | Linux/macOS |
| 开发语言 | Rust | C | C | Go |
选择建议:
cat:脚本、管道、文件拼接、对体积有极端约束的系统(嵌入式、initramfs)。less:查看超大文件(GB 级别),bat的全文件加载会消耗过多内存。ccat:在偏好 Go 二进制而非 Rust 的系统上提供最小化的语法高亮。bat:交互式文件查看、代码审查、演示,以及任何可读性优先于原始吞吐量的场景。
局限性 / 客观评价 #
bat 并非适用于所有场景的工具。了解其边界可以避免挫败感。
启动开销:对于小文件,bat 比 cat 慢约 100-150 倍,不适合顺序处理数千个文件的 shell 循环。在这些情况下请使用 cat 或 --style=plain。
内存占用:bat 在渲染前将整个文件加载到内存中。对于数 GB 的日志文件,请改用 less 或 tail。
终端依赖:在没有彩色能力的终端(或设置了 NO_COLOR)中,bat 会优雅降级为纯文本 —— 但失去了其主要优势。
无写入能力:与 cat 不同,bat 无法通过重定向有意义地创建文件(bat > file 可以工作但相比 cat 没有优势)。
二进制文件处理:bat 会尝试将二进制文件显示为文本。请使用带 -v 标志的 cat 或 xxd/hexdump 查看二进制文件。
常见问题 #
Q: bat 会破坏使用 cat 的现有脚本吗?
不会。当 bat 检测到其输出被管道到另一个进程(非交互式终端)时,它会自动禁用装饰和高亮,行为与 cat 完全一致。在交互式 shell 中将 cat 别名为 bat --paging=never 是安全的。
Q: 如何永久禁用分页器?
在 bat 配置文件中添加 --paging=never,或设置环境变量 BAT_PAGING=never。也可以在交互式使用中别名为 cat='bat --paging=never'。
Q: 可以与 sudo 一起使用吗?
可以,但 sudo 会重置环境,可能找不到用户安装的 bat。使用完整路径:sudo $(which bat) /etc/shadow。或者通过包管理器系统级安装 bat。
Q: 如何为 bat 不认识的编程语言添加支持?
将 .sublime-syntax 文件放入 $(bat --config-dir)/syntaxes,然后运行 bat cache --build。bat 使用与 Sublime Text 相同的语法定义,因此大多数语言包都兼容。
Q: 为什么管道到另一个工具时 bat 会显示行号和装饰?
这通常是因为接收程序分配了伪终端(pty)。使用 --style=plain 或 --decorations=never 强制纯文本模式。也可以显式使用 bat --paging=never --style=plain 管道。
Q: 如何更改主题?
运行 bat --list-themes 查看可用主题,然后在配置文件中设置:echo '--theme="TwoDark"' >> "$(bat --config-file)"。使用 bat --theme=<名称> --list-themes 预览主题。
Q: bat 支持 Windows 吗?
支持。通过 scoop install bat、choco install bat 安装,或从 GitHub releases 页面下载预构建二进制文件。Windows Terminal 和 PowerShell 都支持 bat 的彩色输出。
结论 #
bat 将枯燥的文件查看任务转变为高效的体验。语法高亮、Git 标记、行号和自动分页消除了日常终端工作的摩擦,同时不牺牲 Unix 兼容性。安装它,将 cat 别名化,花更少时间盯着原始文本。
下一步行动:
- 通过包管理器安装
bat(30 秒)。 - 在 shell 配置中添加
alias cat='bat --paging=never'。 - 设置主题:
bat --list-themes,然后配置你喜欢的主题。 - 加入 dibi8 Telegram 开发者社区 获取更多 CLI 工具推荐和讨论。
推荐部署与基础设施 #
上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:
- DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
- HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。
Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。
来源与延伸阅读 #
- bat GitHub 仓库 —— 官方源码、发布版本、问题追踪。
- bat 文档 —— 完整使用指南和示例。
- syntect Rust 库 —— 驱动 bat 的语法高亮引擎。
- delta — Git Diff 语法高亮器 —— Git diff 查看的配套工具。
- bat-extras — 额外脚本 ——
batgrep、batdiff、batman包装器。 - TwoDark 主题参考 —— 深色终端下流行的 bat 主题。
- 与替代品对比 —— bat 维护者的官方对比。
💬 留言讨论