命令列工具
sharkdp/bat avatar
sharkdp/bat

bat:给 cat 加上高亮、分页和 Git 变化标记

一隻有翅膀的貓(1)克隆體。如果您正在尋找對 git 和 diff 操作的更多支持,請查看 delta。

60,450 個 Star1,648 個 ForkRustApache-2.0
GitHub

秒懂

它是什麼?
bat 用 Rust 实现 cat(1) 风格命令,增加语法高亮、Git 集成、不可打印字符显示和自动分页,同时在管道场景回退为纯文本。
適合誰用?
bat 适合在终端中阅读代码、配置和日志,也适合作为 fzf 预览器;若脚本依赖 cat 的纯文本输出,应显式使用 `--paging=never` 或确认非交互行为。开始前先运行 `bat --paging=never` 与管道测试,检查颜色、分页、文件名冲突和旧版 Debian 上的 `batcat` 命令名。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 11 天前。
用什麼語言寫的?
主要是 Rust(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

bat:带语法高亮和 Git 集成的 cat 克隆

bat 是一个用 Rust 编写的命令行工具,重新实现了 cat(1),并加入两项功能:对大量编程语言和标记语言的语法高亮,以及相对索引显示文件修改的 Git 集成。仓库在描述中自称带翅膀的 cat(1) 克隆。仓库元数据显示该项目有 60,098 个星标、1,619 个 fork 和 421 个未关闭的 issue,默认分支名为 master,项目未被归档。

bat 的定位不是替换所有 cat 语义,而是在查看文本时增加语法高亮、分页、行号和 Git 变更标记。默认输出更适合人眼阅读,脚本若需要稳定的原始字节流,仍应使用 cat 或关闭 bat 的装饰选项。这个边界应在 shell 别名和管道设计中明确。

bat:分页与拼接行为

默认情况下,当输出超过一屏时,bat 会把自己的输出交给分页器(如 less)。如果希望它始终像 cat 一样工作,可以在命令行或配置文件中设置 --paging=never;README 建议使用 alias cat='bat --paging=never' 来保留默认行为。当 bat 检测到非交互式终端,即输出被管道传给另一个进程或写入文件时,它会忽略分页器设置,回退为打印纯文本内容,因此文件拼接仍然可用。-A/--show-all 选项可以显示并高亮不可打印字符。

分页器会改变长文件的交互方式。bat 可以把内容交给 less 等分页工具,用户能搜索、滚动并在较长源码中定位;当输出被重定向或接入另一个命令时,则要确认分页和颜色控制不会污染下游输入。README 的示例说明用法方向,但每个终端的环境变量仍可能影响显示。

bat:用法示例与已记录的集成

基本用法包括显示单个文件(bat README.md)、显示多个文件(bat src/*.rs),以及从标准输入读取并根据首行(通常是 shebang)自动判断语法。README 记录了与其他工具的集成:bat 可作为 fzf 的预览器,配合 --color=always 和 --line-range;可通过 -exec 与 find 配合,通过 -X 与 fd 配合;可通过 batgrep 包装器打印 ripgrep 搜索结果;还可与 tail -f 组合用于日志监控,此时需要显式指定语法。它可以通过 --language=help 为 --help 消息着色,文档还展示了如何与 git show 和 git diff 配合查看旧版本文件。

语法高亮依赖文件语言识别和主题配置。文件扩展名通常提供线索,未知扩展名可以通过命令行选项指定语言;主题与样式则控制行号、网格和 Git 标记。高亮是展示层,不是语法解析器,显示颜色不能证明文件可以编译,也不能替代编辑器诊断。

bat:各平台的安装方式

安装方式覆盖了多个平台:Ubuntu 和 Debian 用 apt,Alpine 用 apk,Arch 用 pacman,Fedora 用 dnf,Gentoo 用 emerge,FreeBSD 用 pkg,OpenBSD 用 pkg_add,openSUSE 用 zypper,Nix 用 nix-env,macOS 用 Homebrew 和 MacPorts,Windows 用 WinGet、Chocolatey 和 Scoop。在一些较旧的 Ubuntu 或 Debian 版本中,可执行文件名为 batcat 而不是 bat,原因是与另一个软件包重名。README 说明目前没有推荐的 snap 包。从源码构建需要 Rust 1.79.0 或更高版本;本地源码用 cargo install --path . --locked,从 crates.io 用 cargo install --locked bat。两种方式都不会自动安装 man 手册和 shell 补全文件。

Git 集成适合查看工作区改动,能帮助读者把源码内容和版本差异放在同一视图中。它依赖当前目录处于 Git 工作树以及工具能够读取差异信息。对大仓库、二进制文件或未跟踪文件,显示行为可能不同,使用者应通过一个小型测试仓库确认自己的预期。

bat:主题、样式与自定义语法

主题是主要的自定义点。bat --list-themes 列出可用主题;默认主题是适用于深色背景的 Monokai Extended 和适用于浅色背景的 Monokai Extended Light,可通过 BAT_THEME 环境变量或配置文件更改。三个 8 位主题(ansi、base16、base16-256)始终使用受限调色板以获得最大兼容性。--style 选项控制输出组件,如 numbers、changes、grid、header-filename 和 snip,预定义样式有 default、full、auto 和 plain。用户可以在配置目录的 syntaxes 文件夹中放入 .sublime-syntax 文件并运行 bat cache --build 来添加语法,用同样的方式添加 .tmTheme 主题,并用 --map-syntax 将文件模式映射到语言。

安装方式覆盖常见平台和包管理器,但二进制来源与版本由各平台渠道维护。配置文件位置在不同系统有差异,Windows 还需要注意路径和环境变量写法。README 没有为每一种终端组合提供完整截图,因此排查颜色、分页和字体问题时应先查看 bat --help 与当前配置。

bat:配置文件与 Windows 注意事项

配置文件是一份命令行参数列表,每行一个参数,以 # 开头的行为注释。bat --config-file 打印默认路径,--generate-config-file 生成默认文件,BAT_CONFIG_PATH 或 BAT_CONFIG_DIR 可重定向位置。系统级配置文件在 Linux 和 macOS 上位于 /etc/bat/config,在 Windows 上位于 C:\ProgramData\bat\config。在 Windows 上,bat 基本开箱即用,但内置的 more 分页器功能有限;README 建议安装 less,并说明 Windows 10 自 v1511 起原生支持颜色,Cygwin 的 unix 风格路径不受原生支持。对于乱码输出,--strip-ansi 可移除 ANSI 转义序列,--sanitize 可将终端活动控制字节和 Unicode 双向字符替换为替换字符。

适合 bat 的验收很简单但要覆盖两种输出:在一个带 Rust、Python 或 JavaScript 代码的 Git 工作树中查看文件,确认行号、高亮和差异标记;再把同一文件通过管道重定向,确认下游拿到的是预期文本。随后切换一个主题和语言选项,检查配置是否只改变展示而未改变内容。

bat:开发目标与许可声明

README 列出了四个项目目标:美观而高级的语法高亮、Git 集成、作为 POSIX cat 的直接替代品,以及友好的命令行界面。它指向 doc/alternatives.md 以比较类似程序。项目列出了四位维护者。README 声明 bat 以 MIT 许可证或 Apache License 2.0 提供,由使用者选择,并引用了 LICENSE-APACHE 和 LICENSE-MIT 文件。但本文提供的许可摘录不含许可文本,仅说明在常见路径未找到 LICENSE 文件,因此无法从现有来源引用实际的授权条款。

命令行集成时要把人读和程序读分开。交互终端可以开启分页、颜色和行号;日志采集或脚本管道则应显式关闭这些展示层选项,并检查退出码和标准错误。只有这样,bat 作为阅读工具的便利才不会改变原有 shell 流程。

編輯結論

bat 适合在终端中阅读代码、配置和日志,也适合作为 fzf 预览器;若脚本依赖 cat 的纯文本输出,应显式使用 `--paging=never` 或确认非交互行为。开始前先运行 `bat --paging=never` 与管道测试,检查颜色、分页、文件名冲突和旧版 Debian 上的 `batcat` 命令名。

官方來源

  1. Official README
  2. Project repository
  3. Release notes
社群筆記

社群筆記