

A cat(1) clone with syntax highlighting and Git integration.
主要功能 •
如何使用 •
安装 •
自定义 •
项目目标、替代方案
[English]
[中文]
[日本語]
[한국어]
[Русский]
### 语法高亮
`bat` 支持大量编程和标记语言的语法高亮:

### Git 集成
`bat` 与 `git` 通信以显示相对于索引的修改(见左侧栏):

### 显示不可打印字符
你可以使用 `-A`/`--show-all` 选项来显示和高亮不可打印字符:

### 自动分页
默认情况下,如果输出内容对于单个屏幕来说过大,`bat` 会将其输出通过管道传递给一个 pager(例如 `less`)。
如果你希望 `bat` 始终像 `cat` 一样工作(从不分页输出),你可以在命令行或配置文件中将 `--paging=never` 设置为一个选项。
如果你打算在 shell 配置中将 `cat` 别名设置为 `bat`,可以使用 `alias cat='bat --paging=never'` 来保留默认行为。
#### 文件拼接
即使设置了 pager,你仍然可以使用 `bat` 来拼接文件 :wink:。
每当 `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`](https://github.com/junegunn/fzf) 的预览器。为此,请使用 `bat` 的 `--color=always` 选项来强制彩色输出。你也可以使用 `--line-range` 选项来减少长文件的加载时间:
```
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
```
更多信息,请参见 [`fzf` 的 `README`](https://github.com/junegunn/fzf#preview-window)。
#### `find` 或 `fd`
你可以使用 `find` 的 `-exec` 选项通过 `bat` 预览所有搜索结果:
```
find … -exec bat {} +
```
如果你恰好使用 [`fd`](https://github.com/sharkdp/fd),你可以使用 `-X`/`--exec-batch` 选项做同样的事:
```
fd … -X bat
```
#### `ripgrep`
通过 [`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md),`bat` 可以用作 [`ripgrep`](https://github.com/BurntSushi/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
```
#### `git diff`
你可以将 `bat` 与 `git diff` 结合使用,以带有适当语法高亮的方式查看代码更改周围的行:
```
batdiff() {
git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
}
```
如果你更喜欢单独使用一个工具,请查看 [`bat-extras`](https://github.com/eth-p/bat-extras) 中的 `batdiff`。
如果你正在寻找对 git 和 diff 操作的更多支持,请查看 [`delta`](https://github.com/dandavison/delta)。
#### `xclip`
`bat` 输出中的行号和 Git 修改标记可能会使复制文件内容变得困难。为了防止这种情况,你可以使用 `-p`/`--plain` 选项调用 `bat`,或者直接将输出通过管道传输到 `xclip`:
```
bat main.cpp | xclip
```
`bat` 会检测到输出正在被重定向,并打印纯文件内容。
#### `man`
通过设置 `MANPAGER` 环境变量,可以将 `bat` 用作 `man` 的着色 pager:
```
export MANPAGER="bat -plman"
man 2 select
```
(如果你使用的是 Debian 或 Ubuntu,请将 `bat` 替换为 `batcat`)
如果你更喜欢将其打包成一个新命令,你也可以使用 [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)。
请注意,[Manpage 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax) 是在本仓库中开发的,仍需一些完善。
#### `prettier` / `shfmt` / `rustfmt`
[`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) 脚本是一个封装器,它可以格式化代码并使用 `bat` 打印。
#### `Warp`
#### 高亮 `--help` 信息
你可以使用 `bat` 为帮助文本着色:`$ cp --help | bat -plhelp`
你也可以为此使用一个封装器:
```
# 在你的 .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'
```
对于 `fish`,你可以使用缩写(abbreviations):
```
abbr -a --position anywhere -- --help '--help | bat -plhelp'
abbr -a --position anywhere -- -h '-h | bat -plhelp'
```
这样,你可以继续使用 `cp --help`,但能获得彩色的帮助页面。
请注意,在某些情况下,`-h` 可能不是 `--help` 的简写(例如 `ls`)。在需要将 `-h` 用作命令参数的情况下,你可以在参数前加上 `\`(例如 `ls \-h`)以转义上面定义的别名。
请在 [此仓库](https://github.com/victor-gp/cmd-help-sublime-syntax) 中报告有关帮助语法的任何问题。
## 安装