sharkdp/bat

GitHub: sharkdp/bat

一个带语法高亮和 Git 集成的现代 cat 替代工具,让终端文件查看更美观高效。

Stars: 57648 | Forks: 1475

bat - a cat clone with wings
Build Status license Version info
A cat(1) clone with syntax highlighting and Git integration.

主要功能如何使用安装自定义项目目标、替代方案
[English] [中文] [日本語] [한국어] [Русский]

### 语法高亮 `bat` 支持大量编程和标记语言的语法高亮: ![Syntax highlighting example](https://imgur.com/rGsdnDe.png) ### Git 集成 `bat` 与 `git` 通信以显示相对于索引的修改(见左侧栏): ![Git integration example](https://i.imgur.com/2lSW4RE.png) ### 显示不可打印字符 你可以使用 `-A`/`--show-all` 选项来显示和高亮不可打印字符: ![Non-printable character example](https://i.imgur.com/WndGp9H.png) ### 自动分页 默认情况下,如果输出内容对于单个屏幕来说过大,`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` 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) 中报告有关帮助语法的任何问题。 ## 安装