乐于分享
好东西不私藏

bat: cat 增强小工具,让终端看源码不再黑乎乎

bat: cat 增强小工具,让终端看源码不再黑乎乎

每次在终端里 cat 一个 .py 或者 .rs 文件,黑乎乎一片,想找某行函数得眯着眼数;想加高亮,就得手动拼 cat + less + 一堆别名;想看这次 git 改了哪几行,还得切出去 diff 看一圈再回来。bat 就是冲着这一连串痛点来的——用和 cat 一样的姿势,把「在终端看代码」这件事一次性做舒服。

bat 是什么

bat 是 Rust 写的 cat 替代品,作者 David Peter(@sharkdp),GitHub 上 5.99 万 star、crates.io 累计下载约 417 万。同一个人还做了 fd(find 替代,4.3 万星)、hyperfine(基准测试,2.8 万星)、hexyl(hex 查看,1 万星)——终端圈里几乎人手一套的开发者工具作者。bat 的自我描述只有一句话:"A cat(1) clone with wings." MIT / Apache-2.0 双许可,最新正式版 v0.26.1(2025-12 发布),持续维护到现在。

它能干什么

语法高亮开箱即用:默认支持约 150 种语言,从 Python、Rust 到 nginx、systemd、sql 全套,不配 alias 也能看到颜色。

Git 改动标记:左边栏用 + / - 标出相对 git index 的修改行,配 git show 或 git diff 看代码特别直观。

自动分页:文件超过一屏会自动 pipe 到 less,省掉「cat | less」这一套组合拳。

管道/重定向时自动降级:识别到非交互终端就退化成纯文本输出,放心 alias cat=bat,不会把脚本里的 cat 拼接连环炸掉。

还能当 MANPAGER 看高亮的 man 文档、给 fzf 做预览窗口、给 ripgrep 做输出着色器,可玩性很高。

为什么值得花时间

同类里 pygments、highlight、ccat、GNU source-highlight 这些老牌高亮器,要么不是 drop-in cat 替代,要么没有 Git 集成。bat 的差异化就在「全叠在一起」:用 cat 的姿势,拿到 less + 高亮 + Git 标记 + 自动分页,一次性解决,不用自己拼胶水。HN 上「Bat: Cat with syntax highlighting」拿过 191 分,评论区不少人说是「考虑周到的 rewrite it in rust」代表。

怎么上手

macOS:brew install bat
Debian/Ubuntu:apt install bat(部分老发行版可执行文件叫 batcat,issue #982 已文档化)
Windows:choco install bat 或 scoop install bat
Rust 用户:cargo install bat(需要 rustc 1.87/1.88)

第一次跑 bat README.md 看效果;想换配色就 bat --list-themes,选好后写进 ~/.config/bat/config。要替换 cat,在 ~/.bashrc 或 ~/.zshrc 里加 alias cat=bat,配合交互检测脚本,避免破坏真实管道。

适合谁 & 注意

适合每天在终端里看代码、翻日志、写脚本的人,尤其是想给 cat 加颜色、又懒得折腾别名链的同学。

老实说几个坑:

它本质是「查看器 + 高亮 + 分页」合体,不是严格意义上的纯拼接工具,HN 一直有「bat is not a better version of cat…」这类讨论。如果你脚本里真的依赖 cat 把多文件流式拼起来再处理,记得判断是否交互再 alias。

性能比纯 cat 重不少,仓库 doc/alternatives.md 的基准表显示比 clp 慢(大文件场景明显),issue #2305 也讨论过 bat 作为 fzf 预览时偏慢,建议加 --line-range 限制行数。

Debian/Ubuntu 部分老仓库装出来是 batcat 不是 bat,别名里记得统一。

默认语言覆盖约 150 种,少于 pygments 的 300+,不过 Sublime 语法可扩展,配合 bat cache --build 重建索引。

如果你每天在终端和代码打交道,bat 是个花半小时配置、回报能用很多年的小工具。值得你花个下午试试。

GitHub:https://github.com/sharkdp

觉得顺手就点个 star,也顺手把这条告诉身边还在用纯 cat 的同事。

参考:

bat 仓库与 README(sharkdp 等)
doc/alternatives.md(bat 仓库内置)
crates.io/crates/bat 元数据(crates.io, 2026-07)
Hacker News: Bat: Cat with syntax highlighting(HN 用户, 2025-10-05)
Hacker News: Bat v0.26.0(HN 用户)
Hacker News: bat is not a better version of cat…(HN 用户, 2018)
Drop the Linux cat command for bat(Red Hat Blog, 2022-10-26)
bat issue #2305: fzf preview performance(GitHub issue tracker)
bat issue #982: bat vs batcat on Debian(GitHub issue tracker)