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命令行工具

Download history 15743/week @ 2024-05-01 13012/week @ 2024-05-08 18014/week @ 2024-05-15 14929/week @ 2024-05-22 15932/week @ 2024-05-29 16303/week @ 2024-06-05 15409/week @ 2024-06-12 11950/week @ 2024-06-19 11698/week @ 2024-06-26 13914/week @ 2024-07-03 13555/week @ 2024-07-10 14159/week @ 2024-07-17 13489/week @ 2024-07-24 15263/week @ 2024-07-31 16978/week @ 2024-08-07 16003/week @ 2024-08-14

每月下载量 63,936
用于 60 仓库(55 个直接使用

MIT/ApacheLGPL-3.0-or-later

2.5MB
6.5K SLoC

bat - a cat clone with wings
Build Status license Version info
A cat(1) 克隆,具有语法高亮和 Git 集成。

主要功能使用方法安装自定义项目目标,替代方案
[英文] [中文] [日语] [韩语] [俄语]

赞助商

特别感谢我们最大的 赞助商
WorkOS
您的应用,企业就绪。
只需几行代码即可开始向企业客户销售。
在几分钟内而不是几个月内添加单点登录(以及更多)。

Warp
Warp 是一个内置 AI 的现代、基于 Rust 的终端
因此您和您的团队能够更快地构建出色的软件。

使用参数化命令、
自动完成和类似 IDE 的文本编辑器,在命令行上感觉更有效率。

语法高亮

bat 支持大量编程和标记语言的语法高亮

Syntax highlighting example

Git 集成

batgit 通信以显示相对于索引的修改(请参阅左侧栏)

Git integration example

显示不可打印的字符

您可以使用 -A/--show-all 选项来显示和突出显示不可打印的字符

Non-printable character example

自动分页

默认情况下,如果输出内容过大,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 {}"

有关更多信息,请参阅 fzfREADME

findfd

您可以使用 find-exec 选项使用 bat 预览所有搜索结果。

find -exec bat {} +

如果您使用 fd,您可以使用 -X/--exec-batch 选项做同样的事情。

fd -X bat

ripgrep

使用 batgrepbat 可以用作 ripgrep 搜索结果的打印机。

batgrep needle src/

tail-f

bat 可以与 tail -f 结合使用,以带有语法高亮的持续监控指定文件。

tail -f /var/log/pacman.log | bat --paging=never -l log

请注意,我们必须关闭分页才能使其工作。我们还显式指定了语法(-l log),因为在这种情况下无法自动检测。

git

您可以将 batgit show 结合使用,以查看带有适当语法高亮的指定文件的旧版本。

git show v0.6.0:src/main.rs | bat -l rs

gitdiff

您可以将 batgit 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 一起)。

请在此存储库中报告关于帮助语法的任何问题 此存储库

安装

Packaging status

在 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 默认在深色背景上看起来很好。然而,如果您的终端使用浅色背景,某些主题如 GitHubOneHalfLight 对您来说将工作得更好。您也可以按照下面的“添加新主题”部分的说明使用自定义主题。

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。一旦您找到了一个语法

  1. 创建一个包含语法定义文件的文件夹

    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
    
  2. 现在使用以下命令将这些文件解析到二进制缓存中

    bat cache --build
    
  3. 最后,使用 bat --list-languages 检查新语言是否可用。

    如果您想恢复到默认设置,请调用

    bat cache --clear
    
  4. 如果您认为某个特定语法应该默认包含在 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 中的设置。

注意:如果 PAGERmoremostbat 将静默使用 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_PATHbat 指向配置文件的非默认位置

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位真彩色的终端(如 terminatorkonsoleiTerm2 等),或者使用为有限颜色集设计的其中一个基本 8位主题。有关更多详情和完整支持真彩色的终端列表,请参阅 这篇文章

请确保您的真彩色终端将 COLORTERM 变量设置为 truecolor24bit。否则,bat 将无法确定是否支持24位转义序列(并将回退到8位颜色)。

行号和网格几乎看不见

请尝试不同的主题(查看 bat --list-themes 获取列表)。OneHalfDarkOneHalfLight 主题提供了更亮的网格和行颜色。

文件编码

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-onigregex-fancy 作为功能。

贡献

查看 CONTRIBUTING.md 指南。

维护者

安全漏洞

如果您想报告 bat 中的漏洞,请通过电子邮件联系 David Peter

项目目标和替代方案

bat 努力实现以下目标

  • 提供美观、先进的语法高亮
  • 与 Git 集成以显示文件更改
  • 作为(POSIX)cat 的替代品
  • 提供用户友好的命令行界面

如果您正在寻找类似程序,有许多替代方案。请参阅 此文档 进行比较。

许可证

版权所有 (c) 2018-2023 bat-developers

bat 可在 MIT 许可证或 Apache 许可证 2.0 的条款下提供,任选其一。

有关许可证详情,请参阅 LICENSE-APACHELICENSE-MIT 文件。

依赖项

~11-25MB
~439K SLoC