bat:一个带语法高亮与 Git 集成的 cat(1) 替代品 —— 完整使用指南与源码剖析
本文以 bat 仓库的主 README 为主体,系统讲解这个"A cat(1) clone with wings"的终端文件查看工具:涵盖其四大核心能力(语法高亮、Git 变更标记、非打印字符显示、自动分页)、全部常用命令、各平台安装方式、主题与输出风格定制、配置文件机制,并结合仓库源码(如 src/style.rs、src/diff.rs、src/bin/bat/config.rs)剖析这些功能背后的实现细节,帮助你把 bat 从"能看"用到"精通"。
核心功能
语法高亮
bat 支持对大量编程语言和标记语言进行语法高亮。其底层依赖 Rust 生态中成熟的 syntect 库(见 Cargo.toml 中的 [dependencies.syntect] 声明,版本 5.3.0),而 syntect 可以直接读取任何 Sublime Text 的 .sublime-syntax 语法文件与 .tmTheme 主题文件。仓库中 assets/syntaxes/ 目录即为内置语法集,其中 02_Extra/ 子目录收录了 bat 项目自行开发或维护的补充语法,例如 Manpage 语法(README 指出它仍在完善中)。
Git 集成
bat 会与 git 仓库通信,在左侧侧边栏(changes 组件)中显示文件相对于 git index 的修改状态。这一功能由 src/diff.rs 实现:
- 从源码结构看,
LineChange枚举定义了四种变更状态:Added、RemovedAbove、RemovedBelow、Modified(src/diff.rs#L10-L16); get_git_diff()函数(src/diff.rs#L43)通过gix纯 Rust git 库发现文件所在的仓库、读取 index 中的条目,并用"滑块启发式 + 直方图算法"对 index 中的 blob 与当前工作区文件做逐行比对,生成"行号 → 变更类型"的映射表;- 整个模块由
#![cfg(feature = "git")]守护,对应 Cargo.toml 中的git = ["gix"]feature,说明 Git 变更标注是可编译开关的能力。
显示非打印字符
使用 -A/--show-all 选项可以显示并高亮文件中的非打印字符(制表符、换行符、控制字符等):
bat -A /etc/hosts
自动分页与文件拼接
默认情况下,当输出超过一屏时,bat 会把输出交给 pager(通常是 less)处理。若希望 bat 始终像 cat 一样不启用分页,可设置 --paging=never(命令行参数或配置文件均可)。如果你打算把 cat 别名为 bat,建议写成 alias cat='bat --paging=never' 以保留原有行为。
即使设置了 pager,bat 依然可以直接用来拼接文件:每当 bat 检测到输出流向非交互式终端(即被管道到别的进程或重定向到文件)时,它会自动退化为 cat 的行为,直接输出纯文件内容,此时 --pager 的取值不再起作用。这一"drop-in replacement for cat"的设计是 bat 项目目标之一。分页相关的枚举定义非常简洁,见 src/paging.rs(Always / QuitIfOneScreen / Never,默认值对应 auto 语义下的行为)。
基本用法
显示单个文件:
bat README.md
一次显示多个文件:
bat src/*.rs
从 stdin 读取并自动推断语法(注意:语法只能依据文件首行判断,通常是通过 #!/bin/sh 之类的 shebang):
curl -s https://sh.rustup.rs | bat
从 stdin 读取并显式指定语言:
yaml2json .travis.yml | json_pp | bat -l json
显示并高亮非打印字符:
bat -A /etc/hosts
作为 cat 的替代品:
bat > note.md # 快速创建新文件
bat header.md content.md footer.md > document.md
bat -n main.rs # 只显示行号
bat f - g # 依次输出 'f'、stdin、'g'
与其他工具集成
fzf
可以把 bat 用作 fzf 的预览器。用 --color=always 强制彩色输出,用 --line-range 限制长文件的加载范围以降低耗时:
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
find / fd
用 find 的 -exec 预览所有搜索结果:
find … -exec bat {} +
使用 fd 时,可以用 -X/--exec-batch 达到同样效果:
fd … -X bat
ripgrep
借助 bat-extras 项目中的 batgrep 脚本,bat 可以作为 ripgrep 搜索结果的"打印器":
batgrep needle src/
tail -f
bat 可与 tail -f 组合,持续监控某个文件并保持语法高亮:
tail -f /var/log/pacman.log | bat --paging=never -l log
注意这里必须关闭分页,管道流才不会被 pager 截住;同时由于无法自动探测,需显式指定语法(-l log)。
git show / git diff
与 git show 组合,可以按语法高亮查看文件的旧版本:
git show v0.6.0:src/main.rs | bat -l rs
与 git diff 组合,以 --diff 模式查看代码改动前后的上下文:
batdiff() {
git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
}
bat-extras 中的独立 batdiff 工具即源于此;如果需要对 git/diff 操作有更多支持,可参考同类工具 delta。
xclip
行号与 Git 修改标记会干扰复制文件内容。可以用 -p/--plain 选项,或直接把输出管道到 xclip:
bat main.cpp | xclip
bat 检测到输出被重定向后会自动打印纯文件内容。
man
bat 可以作为 man 的彩色分页器,通过 MANPAGER 环境变量设置:
export MANPAGER="bat -plman"
man 2 select
(在部分较老的 Debian/Ubuntu 发行版中,可执行文件名为 batcat 而非 bat。)喜欢独立命令形式的用户可以用 bat-extras 中的 batman。注意 Manpage 语法本身就在本仓库内开发,仍待完善。
prettier / shfmt / rustfmt
bat-extras 中的 prettybat 脚本是一个包装器:先用格式化工具格式化代码,再用 bat 打印。
高亮 --help 消息
可以用 bat 给帮助文本上色:
cp --help | bat -plhelp
也可以封装成通用函数(写入 .bashrc/.zshrc):
alias bathelp='bat --plain --language=help'
help() {
"$@" --help 2>&1 | bathelp
}
于是 $ help cp、$ help git commit 都能得到彩色帮助。在 zsh 中还可以用全局别名直接接管 -h 与 --help:
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
在 fish 中可以使用缩写(abbreviation):
abbr -a --position anywhere -- --help '--help | bat -plhelp'
abbr -a --position anywhere -- -h '-h | bat -plhelp'
之后照常用 cp --help,输出却是彩色帮助页。
提示:要移除这些缩写,运行
abbr -e -- --help和abbr -e -- -h。缩写名前的--是必需的,因为--help、-h以连字符开头,否则会被abbr自身当作选项。
注意在个别场景下 -h 并非 --help 的缩写(例如 ls)。需要把 -h 当作普通参数时,可用反斜杠转义(如 ls \-h)。help 语法的问题可在 cmd-help-sublime-syntax 项目仓库中反馈。
安装方式
以下各节均以仓库 README 为准,覆盖主流发行版与包管理器。
Ubuntu / Debian 系(apt)
bat 自 Ubuntu 20.04(Focal)与 Debian 11(Bullseye,2021 年 8 月)起进入官方源:
sudo apt install bat
重要:部分老版本 Ubuntu/Debian 中可执行文件名为 batcat(因与另一个包重名)。若安装后 bat --version 不可用,请尝试 batcat --version。可建立符号链接或别名以统一行为:
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
或:
alias bat="batcat"
Ubuntu / Debian(最新 .deb 包)
如果发行版仓库中的版本过旧,可从发行版发布页下载最新的 .deb 包安装:
sudo dpkg -i bat_0.18.3_amd64.deb # 请自行调整版本号与架构
Alpine Linux
apk add bat
Arch Linux
pacman -S bat
Fedora
dnf install bat
Gentoo
emerge sys-apps/bat
FreeBSD
用 pkg 安装预编译包:
pkg install bat
或从 ports 自行构建:
cd /usr/ports/textproc/bat
make install
OpenBSD
pkg_add bat
Nix
nix-env -i bat
openSUSE
zypper install bat
Snap
目前没有官方推荐的 snap 包;社区包可能存在兼容问题,不建议作为首选。
macOS / Linux(Homebrew)
brew install bat
macOS(MacPorts)
port install bat
Windows
Windows 需要先安装 Visual C++ Redistributable 运行库,然后任选一种方式:
- WinGet:
winget install sharkdp.bat - Chocolatey:
choco install bat - Scoop:
scoop install bat - 预编译二进制:从发行版的 Release 页下载(Chocolatey 还会自动装好
less)
二进制 / 源码安装
Release 页提供各架构预编译版本,文件名中带 musl 的归档是静态链接二进制,适合无 glibc 依赖的场景。
从源码构建需要 Rust 1.79.0 或更高(仓库当前 Cargo.toml 中 rust-version 已提升至 1.88):
# 从本地源码
cargo install --path . --locked
# 从 crates.io
cargo install --locked bat
说明:
--path .指定的是源码所在目录,而不是安装位置。
注意:无论哪种源码安装方式,man 页与 shell 补全文件都不会被自动安装;从本地源码构建时,它们会被 cargo 生成到 target 目录的 build 子目录下。shell 补全也可在运行时直接生成:
bat --completion <shell> # 支持的 shell 见 --help
定制
高亮主题
bat --list-themes 列出全部可用主题。默认使用 Monokai Extended(深色背景)或 Monokai Extended Light(浅色背景)。选中 TwoDark 可通过 --theme=TwoDark 或环境变量 BAT_THEME=TwoDark 完成,写入 shell 启动文件(export BAT_THEME="TwoDark")即持久生效,也可以写进配置文件。
用 fzf 在自定义文件上预览各主题:
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
bat 会根据终端背景色自动挑选深浅主题。可以用 --theme-dark/--theme-light 选项或 BAT_THEME_DARK/BAT_THEME_LIGHT 环境变量分别定制两套主题,频繁切换深浅模式的场景尤为实用。
从 src/bin/bat/clap_app.rs 中 --theme 的长帮助文本还可以看到几个特殊取值:
auto(默认):按终端配色自动选择深浅主题;auto:always:即使输出被重定向也探测终端配色;auto:system:从系统级偏好检测配色(仅 macOS);dark/light:直接使用--theme-dark/--theme-light指定的主题。
8 位色主题
bat 内置三个"即使终端支持 truecolor 也始终使用 8 位色"的主题:
ansi:在任何终端上都表现尚可,使用 3 位色(黑、红、绿、黄、蓝、品红、青、白);base16:为 base16 终端主题体系设计,遵循 base16 样式规范使用 4 位色(3 位色加亮色变体);base16-256:为 tinted-shell 设计,把某些亮色替换为 16–21 号 8 位色。不要仅仅因为终端支持 256 色就选它。
这三个受限主题的三大优势:
- 最大兼容性——某些终端工具只支持 3 位色;
- 能跟随终端主题变化(对已打印出的内容同样生效);
- 与终端内其他软件在视觉上更协调。
输出风格(--style)
用 --style 控制输出外观,例如 --style=numbers,changes 只显示 Git 变更标记与行号,不显示网格和文件头。可设 BAT_STYLE 环境变量或写配置文件使其持久。
默认启用的组件为 changes、grid、header-filename、numbers、snip。这一点在 src/style.rs#L52-L59 中得到了源码印证——StyleComponent::Default 的展开正是这五个组件(其中 Changes 依赖 git feature 编译开关)。
预定义风格:
| Style | 说明 |
|---|---|
default |
启用上文列出的推荐组件。 |
full |
启用全部组件(源码见 src/style.rs#L43-L51)。 |
auto |
同 default,但输出被管道时退化为 plain。 |
plain |
禁用全部组件。 |
可单独组合的组件:
| 组件 | 说明 |
|---|---|
changes |
显示 Git 修改标记。 |
header |
header-filename 的别名。 |
header-filename |
内容前显示文件名。 |
header-filesize |
内容前显示文件大小。 |
grid |
用竖线/横线分隔侧边栏、表头与内容。 |
rule |
文件之间的水平分隔线。 |
numbers |
侧边栏显示行号。 |
snip |
在不同行范围之间画分隔线。 |
提示:如果配置文件里写了默认风格,单次运行时仍可用
--style的+/-前缀做增量修改。例如配置中是--style=full,-snip,本次运行加--style=-grid,+snip即可去掉网格并补回snip;若想完全覆盖,直接写--style=numbers。
这一增量机制的实现见 src/style.rs#L143-L213:ComponentAction 将每个组件解析为 Override/Add/Remove 三种动作;StyleComponentList::to_components() 在折叠多个列表时,只要新列表含 Override 动作(即没有 +/- 前缀的项)就先清空已有集合,否则做合并。文件内的单元测试(如 grid,header 叠加 -grid 再叠加 +numbers 得到 header+numbers)验证了这一优先级规则。
装饰(decorations)
默认只在输出到交互式终端时才显示装饰(行号、文件头、网格等)。--decorations 可控制该行为:always 表示即使管道输出也保留装饰;never 完全关闭。可选值为 auto(默认)、never、always。
另有 --force-colorization(短选项 -f),它是 --decorations=always --color=always 的别名,用于管道到其它程序时仍保留颜色与装饰,定义见 src/bin/bat/clap_app.rs#L322-L334。
添加新语法 / 语言定义
发现缺少某门语言时,可以按下面步骤扩展当前安装:
-
在配置目录下创建语法文件夹并放入
.sublime-syntax文件:mkdir -p "$(bat --config-dir)/syntaxes" cd "$(bat --config-dir)/syntaxes" # 在此目录(或其子目录)放入新的 '.sublime-syntax' 语言定义文件,例如 # 克隆某个 Sublime 语法包查找 Sublime 语法包的良好途径是 Sublime 的 Package Control 生态。
-
把文件解析进二进制缓存:
bat cache --build -
用
bat --list-languages确认新语言可用。想恢复默认设置:bat cache --clear -
若你认为某语法应该被 bat 默认收录,请阅读 doc/assets.md 中的收录政策后,在仓库中开一个 "syntax request" issue。
添加新主题
流程与添加语法几乎相同:
注意:自定义主题必须是
.tmTheme格式;较新的.sublime-color-scheme格式目前不受支持。
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
# 下载一个 '.tmTheme' 格式的主题
# (可参考仓库内置主题的目录结构,见 assets/themes/)
# 更新二进制缓存
bat cache --build
最后用 bat --list-themes 验证。主题名直接取自 .tmTheme 文件名。仓库中 assets/themes/ 展示了内置主题的目录组织(ansi.tmTheme、base16.tmTheme 等顶层文件,以及 TwoDark/、gruvbox/、onehalf/ 等主题子目录)。
文件类型关联(--map-syntax)
用 --map-syntax 新增或修改文件名模式到语言的映射。参数形式为 pattern:syntax,其中 pattern 是与文件名和绝对路径都进行匹配的 glob,syntax 是 bat --list-languages 中的完整语言名。
注意:这个选项通常应写进配置文件以持久化,而不是作为一次性命令行参数;若只是单次手动指定语言,直接用 -l 更合适。
示例:
# 所有 .conf 扩展名文件使用 INI 语法
--map-syntax='*.conf:INI'
# 所有名为 .ignore 的文件(精确匹配)使用 Git Ignore 语法
--map-syntax='.ignore:Git Ignore'
# /etc/apache2 子目录下所有 .conf 使用 Apache Conf 语法(此映射已内置)
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
--map-syntax 的长帮助(src/bin/bat/clap_app.rs#L378-L392)特别强调:冒号右侧是语法名而非文件扩展名。内置映射规则的来源可参考 src/syntax_mapping/builtins/ 目录——按 common/、linux/、bsd-family/、unix-family/、windows/ 等分族的 TOML 文件。
使用其它分页器
bat 使用 PAGER 环境变量指定的分页器;未设置时默认 less。也可以用 --pager=builtin 或 BAT_PAGER=builtin 启用内置分页器。想换分页器,改 PAGER 或用 BAT_PAGER 覆盖 PAGER。
注意:若
PAGER是more或most,bat 会静默改用less,以确保颜色支持。
分页器命令行参数也可以经由 PAGER/BAT_PAGER 传递:
export BAT_PAGER="less -RFK"
也可以不用环境变量,直接写进配置文件的 --pager 选项。
以 less 为分页器
使用 less 时,bat 会自动追加额外选项以改善体验:-R/--RAW-CONTROL-CHARS、-F/--quit-if-one-screen、-K/--quit-on-intr,以及在特定条件下的 -X/--no-init 与 -S/--chop-long-lines。
重要:以下情况不会自动追加这些选项:
- 分页器不是名为
less;--pager参数自带了命令行参数(如--pager="less -R");BAT_PAGER环境变量自带了命令行参数(如export BAT_PAGER="less -R")。而
--quit-if-one-screen在以下情况不会追加:
- 使用了
--paging=always;BAT_PAGING设为always。
各选项作用:
-R:正确解析 ANSI 颜色所必需;-F:输出小于终端高度时立即退出,小文件不必按q;-K:收到中断信号时立即退出,保证less与bat在 SIGINT 时一起退出;-X:针对 530 之前版本(Windows 上 558 之前)的less追加,用于修复-F的 bug,但会破坏鼠标滚轮。老版本 less 若想要滚轮、不在乎一键退出,可把分页器设为less -R;less 530+ 则开箱即用;-S:仅当 bat 使用了-S/--chop-long-lines时追加,指示less截断超过终端宽度的行。
缩进(Tab 展开)
bat 自己把 tab 展开为 4 个空格,不依赖分页器。用 --tabs 参数指定展开宽度。
注意:通过 --pager 或 LESS 环境变量给分页器设置 tabstop 是无效的,因为分页器收到的已经是展开后的空格——这是为了避免侧边栏导致的缩进错乱。--tabs=0 可覆盖此行为,让 tab 交由分页器处理。
深色模式
macOS 深色模式下,可按系统主题切换 bat 主题,例如深色用 default、浅色用 GitHub:
alias cat="bat --theme auto:system --theme-dark default --theme-light GitHub"
GNOME 的深色模式影响 org.gnome.desktop.interface color-scheme 设置,可用如下 bash 封装读取该设置:
# .bashrc
sys_color_scheme_is_dark() {
condition=$(gsettings get org.gnome.desktop.interface color-scheme)
condition=$(echo "$condition" | tr -d "[:space:]'")
if [ $condition == "prefer-dark" ]; then
return 0
else
return 1
fi
}
bat_alias_wrapper() {
#get color scheme
sys_color_scheme_is_dark
if [[ $? -eq 0 ]]; then
# bat command with dark color scheme
bat --theme=default "$@"
else
# bat command with light color scheme
bat --theme=GitHub "$@"
fi
}
alias cat='bat_alias_wrapper'
配置文件
bat 支持配置文件,位置随操作系统而异,用下面命令获取当前系统的默认路径:
bat --config-file
也可以用 BAT_CONFIG_PATH 或 BAT_CONFIG_DIR 环境变量把配置文件(或配置目录)指向非默认位置:
export BAT_CONFIG_PATH="/path/to/bat/bat.conf"
export BAT_CONFIG_DIR="/path/to/bat"
用 --generate-config-file 可生成一份带注释的默认配置:
bat --generate-config-file
源码中 generate_config_file()(src/bin/bat/config.rs#L32-L99)展示了这份默认配置的完整内容,包含主题、斜体、关闭自动分页、tmux 下启用 less 鼠标滚轮、语法映射等注释示例。
此外还有系统级配置:Linux/macOS 位于 /etc/bat/config,Windows 位于 C:\ProgramData\bat\config(对应 src/bin/bat/config.rs#L9-L23 中 DEFAULT_SYSTEM_CONFIG_PREFIX 的平台分支)。若系统级配置存在,用户配置的内容会追加在其后。
格式
配置文件就是一行一个命令行参数的简单列表(bat --help 可查全部选项与取值),以 # 开头的行是注释。
示例配置:
# 主题设为 "TwoDark"
--theme="TwoDark"
# 显示行号、Git 修改与文件头(不显示网格)
--style="numbers,changes,header"
# 终端中使用斜体(并非所有终端都支持)
--italic-text=always
# Arduino .ino 文件使用 C++ 语法
--map-syntax "*.ino:C++"
从 src/bin/bat/config.rs#L104-L151 可以看到解析逻辑:系统配置与用户配置依次读入(若两者解析为同一文件则跳过,避免重复),逐行去除空行与 # 注释行,再用 shell-words 按 shell 分词规则拆分为参数——这意味着带空格的值需要引号(测试用例验证了 --theme "Sublime Snazzy" 这类情况)。此外 get_args_from_env_vars()(src/bin/bat/config.rs#L153-L172)表明以下环境变量会转成对应参数:BAT_TABS→--tabs、BAT_WIDTH→--terminal-width、BAT_THEME/BAT_THEME_DARK/BAT_THEME_LIGHT、BAT_PAGER→--pager、BAT_PAGING→--paging、BAT_STYLE→--style;BAT_OPTS 同样会被解析为一组参数(见 src/bin/bat/config.rs#L133-L135)。
在 Windows 上使用 bat
bat 在 Windows 上大体开箱即用,但有几个功能可能需要额外配置。
前置条件
需要安装 Visual C++ Redistributable 运行库。
分页
Windows 自带的分页器 more 功能非常有限。可下载 Windows 版 less(从 less 主页或经 Chocolatey),放到 PATH 中或按上文"使用其它分页器"一节配置环境变量。Chocolatey 包会自动安装 less。
颜色
Windows 10 自 v1511 起在 conhost(命令提示符)与 PowerShell 中原生支持颜色,较新的 bash 亦支持。更早的版本可用内置 ConEmu 的 Cmder。
注意:老版本 less 在 Windows 上不能正确解析颜色。修正办法是安装 Git 时勾选可选 Unix 工具以纳入 PATH;若没有其它分页器,可用 --paging=never 或把 BAT_PAGER 设为空串彻底禁用分页。
Cygwin
Windows 版 bat 不原生支持 Cygwin 风格路径(/cygdrive/*),传入绝对 cygwin 路径会报 The system cannot find the path specified. (os error 3)。可写一个包装函数(加入 .bash_profile):
bat() {
local index
local args=("$@")
for index in $(seq 0 ${#args[@]}) ; do
case "${args[index]}" in
-*) continue;;
*) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
esac
done
command bat "${args[@]}"
}
故障排查
输出乱码
若输入文件包含颜色码、ANSI 转义序列或控制字符,bat 在做语法高亮与折行时会出现问题,输出可能乱码。
- 如果你的 bat 版本支持
--strip-ansi=auto,可用它在高亮前移除这些序列; - 或者用
--color=never --wrap=never同时关闭高亮与折行; - 对不可信输入,
--sanitize=auto|always|never还会把终端可执行的控件字节、Unicode 双向/零宽格式字符替换为 Unicode 替换字符,并隐式地以相同取值启用--strip-ansi。
注意:
--strip-ansi的auto值在语法为纯文本时不会移除转义序列。
终端与颜色
bat 同时兼容支持/不支持 truecolor 的终端,但多数高亮主题的颜色并非为 8 位色优化。强烈建议使用支持 24 位 truecolor 的终端(terminator、konsole、iTerm2 等),或使用上文介绍的 8 位色主题。
确认 truecolor 终端把 COLORTERM 设为 truecolor 或 24bit,否则 bat 无法判断是否支持 24 位转义序列(会回退到 8 位色)。
行号与网格几乎看不清
换个主题试试(bat --list-themes 查看列表)。OneHalfDark 与 OneHalfLight 提供的网格与行号颜色更亮。
文件编码
bat 原生支持 UTF-8 与 UTF-16。其它编码通常无法自动探测,建议先转换为 UTF-8,例如用 iconv:
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
若 bat 无法自动探测语法,可能还需要配合 -l/--language。
开发
# 递归克隆以获取所有子模块
git clone --recursive <本仓库地址>
# 构建(debug 版本)
cd bat
cargo build --bins
# 运行单元测试与集成测试
cargo test
# 安装(release 版本)
cargo install --path . --locked
# 构建使用自定义语法/主题的 bat 二进制
bash assets/create.sh
cargo install --path . --locked --force
其中 assets/create.sh 用于把修改过的语法与主题重新打包。如果想把 bat 的 pretty-printing 能力作为库来集成到自己的应用中,可参考 examples 目录下的示例程序(如 examples/simple.rs、examples/advanced.rs),并参阅 crate 的 API 文档。注意:以库方式依赖 bat 时必须启用 regex-onig 或 regex-fancy feature 之一(见 Cargo.toml 中的 feature 定义),且建议关闭 application feature。
项目目标与替代品
bat 追求以下目标:
- 提供美观、先进的语法高亮;
- 与 Git 集成,显示文件修改;
- 成为 POSIX
cat的 drop-in replacement; - 提供用户友好的命令行界面。
如果需要同类工具的横向比较,见 doc/alternatives.md。
其它资源
- 多语言 README:中文、日本語、한국어、Русский
- 参与贡献:参见 CONTRIBUTING.md
- 安全漏洞:参见 SECURITY.md
- 许可:MIT License 或 Apache License 2.0 二选一,见 LICENSE-APACHE 与 LICENSE-MIT
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00