39 个版本 (23 个重大更改)
0.24.0 | 2023年10月11日 |
---|---|
0.23.0 | 2023年3月25日 |
0.22.1 | 2022年9月10日 |
0.21.0 | 2022年5月12日 |
0.4.1 | 2018年5月31日 |
#5 在 命令行工具
每月下载量 63,936
用于 60 个 仓库(55 个直接使用)
2.5MB
6.5K SLoC
主要功能 • 使用方法 • 安装 • 自定义 • 项目目标,替代方案
[英文] [中文] [日语] [韩语] [俄语]
赞助商
特别感谢我们最大的 赞助商
您的应用,企业就绪。
只需几行代码即可开始向企业客户销售。
在几分钟内而不是几个月内添加单点登录(以及更多)。
Warp 是一个内置 AI 的现代、基于 Rust 的终端
因此您和您的团队能够更快地构建出色的软件。
使用参数化命令、
自动完成和类似 IDE 的文本编辑器,在命令行上感觉更有效率。
语法高亮
bat
支持大量编程和标记语言的语法高亮
Git 集成
bat
与 git
通信以显示相对于索引的修改(请参阅左侧栏)
显示不可打印的字符
您可以使用 -A
/--show-all
选项来显示和突出显示不可打印的字符
自动分页
默认情况下,如果输出内容过大,bat
会将其输出到分页器(例如 less
)。如果您希望 bat
总是像 cat
那样工作(始终不进行分页),则可以在命令行或配置文件中设置 --paging=never
选项。如果您想在您的 shell 配置中将 cat
别名为 bat
,可以使用 alias cat='bat -p paging=never'
来保留默认行为。
文件连接
即使在设置了分页器的情况下,您仍然可以使用 bat
来连接文件 😉。每当 bat
检测到一个非交互式终端(即当您将输出管道传输到另一个进程或文件时),bat
将作为 cat
的替代品,并回退到打印纯文件内容,无论 --pager
选项的值如何。
使用方法
在终端显示单个文件
> bat README.md
一次显示多个文件
> bat src/*.rs
从 stdin 读取,自动确定语法(注意,如果语法可以从文件的第一行确定,则高亮显示将正常工作,通常是通过 shebang,如 #!/bin/sh
)
> curl -s https://sh.rustup.rs | bat
从 stdin 读取,显式指定语言
> yaml2json .travis.yml | json_pp | bat -l json
显示并高亮非可打印字符
> bat -A /etc/hosts
将其作为 cat
的替代品使用
bat > note.md # quickly create a new file
bat header.md content.md footer.md > document.md
bat -n main.rs # show line numbers (only)
bat f - g # output 'f', then stdin, then 'g'.
与其他工具的集成
fzf
您可以将 bat
用作 fzf
的预览器。为此,使用 bat
的 --color=always
选项强制输出彩色。您还可以使用 --line-range
选项限制长文件的加载时间。
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
有关更多信息,请参阅 fzf
的 README
。
find
或 fd
您可以使用 find
的 -exec
选项使用 bat
预览所有搜索结果。
find … -exec bat {} +
如果您使用 fd
,您可以使用 -X/
选项做同样的事情。--exec-batch
fd … -X bat
ripgrep
使用 batgrep
,bat
可以用作 ripgrep
搜索结果的打印机。
batgrep needle src/
tail-f
bat
可以与 tail -f
结合使用,以带有语法高亮的持续监控指定文件。
tail -f /var/log/pacman.log | bat --paging=never -l log
请注意,我们必须关闭分页才能使其工作。我们还显式指定了语法(-l log
),因为在这种情况下无法自动检测。
git
您可以将 bat
与 git show
结合使用,以查看带有适当语法高亮的指定文件的旧版本。
git show v0.6.0:src/main.rs | bat -l rs
gitdiff
您可以将 bat
与 git diff
结合使用,以查看带有适当语法高亮的代码更改周围的行。
batdiff() {
git diff --name-only --relative --diff-filter=d | xargs bat --diff
}
如果您希望将其作为单独的工具使用,请查看 bat-extras
中的 batdiff
。
如果您需要更多关于git和diff操作的支持,请查看 delta
。
xclip
bat
的输出中的行号和Git修改标记可能会使复制文件内容变得困难。为了防止这种情况,您可以带上 -p
/--plain
选项调用 bat
,或者直接将输出管道化到 xclip
bat main.cpp | xclip
bat
会检测到输出被重定向,并打印纯文本文件内容。
man
您可以通过设置环境变量 MANPAGER
来将 bat
用作 man
的彩色分页器。
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man 2 select
(如果您在 Debian 或 Ubuntu 上,请将 bat
替换为 batcat
)
如果您遇到格式问题,可能还需要设置 MANROFFOPT="-c"
。
如果您希望将其捆绑到一个新命令中,您也可以使用 batman
。
请注意,此存储库中开发的 Manpage 语法 还需要一些工作。
此外,请注意,这不会与 Mandocs man
实现一起工作。
prettier
/ shfmt
/ rustfmt
prettybat
脚本是一个包装器,可以将代码格式化,并用 bat
打印。
突出显示 --help
消息
您可以使用 bat
来着色帮助文本: $ cp --help | bat -plhelp
您还可以使用一个包装器
# in your .bashrc/.zshrc/*rc
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'
这样,您就可以继续使用 cp --help
,但会得到着色帮助页面。
请注意,在某些情况下,-h
可能不是 --help
的缩写(例如,与 ls
一起)。
请在此存储库中报告关于帮助语法的任何问题 此存储库。
安装
在 Ubuntu(使用 apt
)上
... 以及其他基于 Debian 的 Linux 发行版。
bat
从 Ubuntu 20.04 ("Focal") 开始提供,这是在 Ubuntu 上,以及从 2021 年 8 月开始提供,这是在 Debian 上(Debian 11 - "Bullseye")。
如果您的Ubuntu/Debian安装版本足够新,您可以简单地运行
sudo apt install bat
重要:如果您以这种方式安装 bat
,请注意,可执行文件可能安装为 batcat
而不是 bat
(由于与另一个包的名称冲突[链接])。您可以设置一个 bat -> batcat
符号链接或别名,以防止由此可能引起的问题,并与其他发行版保持一致
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
在Ubuntu(使用最新的 .deb
包)
... 以及其他基于 Debian 的 Linux 发行版。
如果该软件包尚未升级到您的Ubuntu/Debian安装,或者您想安装 bat
的最新版本,请从 发行页面 下载最新的 .deb
软件包,并通过以下方式安装
sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
在Alpine Linux上
如果您已启用适当的仓库,可以从官方源安装 bat
软件包
apk add bat
在Arch Linux上
您可以从官方源安装 bat
软件包
pacman -S bat
在Fedora上
您可以从官方的 Fedora Modular 仓库安装 bat
软件包
dnf install bat
在Funtoo Linux上
您可以从dev-kit安装 bat
软件包
emerge sys-apps/bat
在Gentoo Linux上
您可以从官方源安装 bat
软件包
emerge sys-apps/bat
在Void Linux上
您可以通过xbps-install安装 bat
xbps-install -S bat
在Termux上
您可以通过pkg安装 bat
pkg install bat
在FreeBSD上
您可以使用pkg安装预编译的 bat
软件包
pkg install bat
或从FreeBSD ports自行构建
cd /usr/ports/textproc/bat
make install
在OpenBSD上
您可以使用 pkg_add(1)
安装 bat
软件包
pkg_add bat
通过nix
您可以使用 nix 软件包管理器 安装 bat
nix-env -i bat
在openSUSE上
您可以使用zypper安装 bat
zypper install bat
通过snap软件包
目前没有推荐的snap软件包可用。现有软件包可能可用,但不受官方支持,可能包含 问题。
在macOS(或Linux)通过Homebrew
您可以使用 Homebrew 安装 bat
brew install bat
在macOS通过MacPorts
或使用 MacPorts 安装 bat
port install bat
在Windows上
在Windows上安装 bat
有几种选择。安装 bat
后,请查看“在Windows上使用 bat
” 部分。
先决条件
您需要安装 Visual C++ Redistributable 软件包。
使用WinGet
您可以通过 WinGet 安装 bat
winget install sharkdp.bat
使用Chocolatey
您可以通过Chocolatey安装 bat
choco install bat
使用Scoop
您可以通过scoop 安装 bat
scoop install bat
从预构建的二进制文件
您可以从发布页面下载预构建的二进制文件,
您需要安装 Visual C++ Redistributable 软件包。
从二进制文件
查看发布页面中不同架构的预构建版本的 bat
。也提供了静态链接的二进制文件:查找文件名中包含 musl
的存档。
从源代码
如果您想从源代码构建 bat
,则需要 Rust 1.70.0 或更高版本。然后您可以使用 cargo
来构建所有内容
cargo install --locked bat
注意,像手册页或shell完成文件这样的额外文件不能通过这种方式安装。它们将由 cargo
生成,并应在 cargo 目标文件夹(在 build
下)中可用。
自定义
高亮主题
使用 bat --list-themes
获取所有可用语法高亮主题的列表。要选择 TwoDark
主题,请使用带有 --theme=TwoDark
选项的 bat
或将环境变量 BAT_THEME
设置为 TwoDark
。在您的 shell 启动文件中使用 export BAT_THEME="TwoDark"
来使更改永久生效。或者,使用 bat
的配置文件。
如果您想预览自定义文件的不同主题,可以使用以下命令(您需要 fzf
才能这样做)
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
bat
默认在深色背景上看起来很好。然而,如果您的终端使用浅色背景,某些主题如 GitHub
或 OneHalfLight
对您来说将工作得更好。您也可以按照下面的“添加新主题”部分的说明使用自定义主题。
8位主题
bat
有三个主题,即使在支持真彩色的情况下也始终使用 8位颜色
ansi
在任何终端上看起来都相当不错。它使用 3 位颜色:黑色、红色、绿色、黄色、蓝色、品红色、青色和白色。base16
是为base16终端主题设计的。它根据base16 样式指南使用 4 位颜色(3 位颜色加上明亮变体)。base16-256
是为base16-shell设计的。它将某些明亮颜色替换为 16 到 21 的 8 位颜色。**不要**仅仅因为您有一个 256 色终端而不使用 base16-shell 就使用这个主题。
尽管这些主题的限制更多,但它们与真彩色主题相比有三个优点。它们
- 具有最大兼容性。一些终端实用程序不支持超过 3 位颜色。
- 适应终端主题更改。即使对于已经打印的输出。
- 与其他终端软件视觉上更和谐。
输出样式
您可以使用 --style
选项来控制 bat
输出的外观。例如,您可以使用 --style=numbers,changes
来仅显示 Git 变更和行号,而不显示网格和文件头。将 BAT_STYLE
环境变量设置为使这些更改持久化,或者使用 bat
的 配置文件。
添加新的语法/语言定义
如果您发现某个特定语法在 bat
中不可用,您可以按照以下说明轻松地将新语法添加到当前的 bat
安装中。
bat
使用出色的 syntect
库进行语法高亮。 syntect
可以读取任何 Sublime Text .sublime--syntax
文件 和主题。
查找 Sublime 语法包的好资源是 Package Control。一旦您找到了一个语法
-
创建一个包含语法定义文件的文件夹
mkdir -p "$(bat --config-dir)/syntaxes" cd "$(bat --config-dir)/syntaxes" # Put new '.sublime-syntax' language definition files # in this folder (or its subdirectories), for example: git clone https://github.com/tellnobody1/sublime-purescript-syntax
-
现在使用以下命令将这些文件解析到二进制缓存中
bat cache --build
-
最后,使用
bat --list-languages
检查新语言是否可用。如果您想恢复到默认设置,请调用
bat cache --clear
-
如果您认为某个特定语法应该默认包含在
bat
中,请在阅读了政策和说明 这里 之后考虑提交一个 "语法请求" 工单:提交语法请求。
添加新的主题
这和添加新的语法定义非常相似。
首先,创建一个包含新的语法高亮主题的文件夹
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
# Download a theme in '.tmTheme' format, for example:
git clone https://github.com/greggb/sublime-snazzy
# Update the binary cache
bat cache --build
最后,使用 bat --list-themes
检查新主题是否可用。
添加或更改文件类型关联
您可以使用 --map-syntax
命令行选项添加新文件名模式(或更改现有模式)。此选项的参数形式为 pattern:syntax
,其中 pattern
是匹配文件名和绝对文件路径的 glob 模式。 syntax
部分是支持的语言的完整名称(使用 bat --list-languages
查看概述)。
注意:您可能希望将此选项用作 bat
的配置文件中的一个条目 以实现持久化,而不是将其作为一次性参数传递到命令行。通常,如果您想手动指定一个文件的编程语言,只需使用 --l
。
示例:要为所有扩展名为 .conf
的文件使用 "INI" 语法高亮,请使用
--map-syntax='*.conf:INI'
示例:要使用 "Git Ignore" 语法打开所有名为 .ignore
的文件(精确匹配),请使用
--map-syntax='.ignore:Git Ignore'
示例:要使用 "Apache Conf" 语法打开所有位于 /etc/apache2
子文件夹中的 .conf
文件,请使用(此映射已经内置)
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
使用不同的分页器
bat
使用在 PAGER
环境变量中指定的分页器。如果此变量未设置,则默认使用 less
。如果您想使用不同的分页器,可以修改 PAGER
变量或将 BAT_PAGER
环境变量设置为覆盖 PAGER
中的设置。
注意:如果 PAGER
是 more
或 most
,bat
将静默使用 less
以确保支持颜色。
如果您想向分页器传递命令行参数,也可以通过 PAGER
/BAT_PAGER
变量设置。
export BAT_PAGER="less -RF"
除了使用环境变量外,您还可以使用 bat
的 配置文件 来配置分页器(--pager
选项)。
注意:默认情况下,如果分页器设置为 less
(且未指定命令行选项),bat
将向分页器传递以下命令行选项:-R
/--RAW-CONTROL-CHARS
,-F
/--quit-if-one-screen
和 -X
/--no-init
。最后一个选项(-X
)仅用于 less
旧版本小于 530。
-R
选项需要正确解释 ANSI 颜色。第二个选项(-F
)指示 less,如果输出大小小于终端的垂直大小,则立即退出。这对于小文件来说很方便,因为您不需要按 q
键退出分页器。第三个选项(-
)需要修复旧版本 less
中 --quit-if-one-screen
功能的 bug。不幸的是,这也破坏了 less
的鼠标滚轮支持。
如果您想在旧版本的 less
中启用鼠标滚轮滚动,只需传递 -R
(如上例所示,这将禁用退出-if-one-screen 功能)。对于 530 或更新的 less,它应该会正常工作。
缩进
bat
会自动将制表符展开为 4 个空格,而不是依赖于分页器。要更改此设置,只需添加带有您希望显示的空格数的 --tabs
参数。
注意:为分页器定义制表符位置(通过 bat
的 --pager
参数或通过 LESS
环境变量为 less
)不会考虑,因为分页器将已展开为空格的制表符而不是制表符。这种行为是为了避免侧边栏引起的缩进问题。使用 bat
的 --tabs=0
将覆盖它,并允许分页器消耗制表符。
暗黑模式
如果您在 macOS 中使用暗黑模式功能,可能想配置 bat
使用基于操作系统主题的不同主题。以下代码片段在 暗黑模式 时使用 default
主题,在 浅色模式 时使用 GitHub
主题。
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
配置文件
bat
还可以通过配置文件进行自定义。文件的位置取决于您的操作系统。要获取您系统的默认路径,请调用
bat --config-file
或者,您可以使用环境变量 BAT_CONFIG_PATH
将 bat
指向配置文件的非默认位置
export BAT_CONFIG_PATH="/path/to/bat.conf"
您可以使用 --generate-config-file
选项创建默认配置文件。
bat --generate-config-file
现在还有一个全局配置文件,Linux 和 Mac OS 下的位置是 /etc/bat/config
,Windows 下的位置是 C:\ProgramData\bat\config
。如果存在全局配置文件,用户配置的内容将简单地附加到它上面。
格式
配置文件是一个简单的命令行参数列表。使用 bat --help
查看所有可能的选项和值。此外,您可以通过在行首添加 #
字符来添加注释。
示例配置文件
# Set the theme to "TwoDark"
--theme="TwoDark"
# Show line numbers, Git modifications and file header (but no grid)
--style="numbers,changes,header"
# Use italic text on the terminal (not supported on all terminals)
--italic-text=always
# Use C++ syntax for Arduino .ino files
--map-syntax "*.ino:C++"
在 Windows 上使用 bat
bat
在 Windows 上大多数情况下可以直接使用,但一些功能可能需要额外的配置。
先决条件
您需要安装 Visual C++ Redistributable 软件包。
分页
Windows 只包含一个非常有限的分页器,以 more
的形式。您可以从其主页 下载 less
的 Windows 二进制文件 或通过 Chocolatey 进行下载。要使用它,请将二进制文件放在您的 PATH
中的目录内或 定义一个环境变量。Chocolatey 软件包会自动安装 less
。
颜色
Windows 10 从 v1511 开始原生支持在 conhost.exe
(命令提示符)和 PowerShell 中以及 bash 的新版本中使用颜色,在更早的 Windows 版本上,您可以使用 Cmder,它包含 ConEmu。
注意:旧版本的 less
在 Windows 上不能正确解释颜色。要修复此问题,您可以在安装 Git 时将可选的 Unix 工具添加到您的 PATH 中。如果您没有安装其他分页器,您可以通过传递 --paging=never
或将 BAT_PAGER
设置为空字符串来完全禁用分页。
Cygwin
Windows 上的 bat
原生不支持 Cygwin 的 Unix 风格路径(/cygdrive/*
)。当以绝对 Cygwin 路径作为参数传递时,bat
将遇到以下错误: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
传递 --color=never --wrap=never
选项来禁用语法高亮和换行。
终端 & 颜色
bat
可以处理具有和没有真彩色支持的终端。然而,大多数语法高亮主题中的颜色并不是针对8位颜色优化的。因此,强烈建议您使用支持24位真彩色的终端(如 terminator
、konsole
、iTerm2
等),或者使用为有限颜色集设计的其中一个基本 8位主题。有关更多详情和完整支持真彩色的终端列表,请参阅 这篇文章。
请确保您的真彩色终端将 COLORTERM
变量设置为 truecolor
或 24bit
。否则,bat
将无法确定是否支持24位转义序列(并将回退到8位颜色)。
行号和网格几乎看不见
请尝试不同的主题(查看 bat --list-themes
获取列表)。OneHalfDark
和 OneHalfLight
主题提供了更亮的网格和行颜色。
文件编码
bat
本地支持UTF-8以及UTF-16。对于其他任何文件编码,您可能需要首先将其转换为UTF-8,因为通常无法自动检测编码。您可以使用 iconv
来这样做。例如:如果您有一个使用Latin-1(ISO-8859-1)编码的PHP文件,您可以调用
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
注意:如果语法不能由 bat
自动检测,您可能需要使用 -l
/--language
选项。
开发
# Recursive clone to retrieve all submodules
git clone --recursive https://github.com/sharkdp/bat
# Build (debug version)
cd bat
cargo build --bins
# Run unit tests and integration tests
cargo test
# Install (release version)
cargo install --path . --locked
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install --path . --locked --force
如果您想构建一个使用 bat
美化打印功能的库的应用程序,请查看 API 文档。请注意,当您将 bat
作为库依赖时,您必须使用 regex-onig
或 regex-fancy
作为功能。
贡献
查看 CONTRIBUTING.md
指南。
维护者
安全漏洞
如果您想报告 bat
中的漏洞,请通过电子邮件联系 David Peter。
项目目标和替代方案
bat
努力实现以下目标
- 提供美观、先进的语法高亮
- 与 Git 集成以显示文件更改
- 作为(POSIX)
cat
的替代品 - 提供用户友好的命令行界面
如果您正在寻找类似程序,有许多替代方案。请参阅 此文档 进行比较。
许可证
版权所有 (c) 2018-2023 bat-developers。
bat
可在 MIT 许可证或 Apache 许可证 2.0 的条款下提供,任选其一。
有关许可证详情,请参阅 LICENSE-APACHE 和 LICENSE-MIT 文件。
依赖项
~11-25MB
~439K SLoC