6

bat -- 一只会飞的猫

 2 years ago
source link: https://ttys3.dev/post/bat-a-cat-clone-with-wings/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

May 15, 2020

今天开始新建了一个叫 commandlinefu 的子目录(或者叫分类), 专门分享命令行相关的东西。

5秒钟版本

这次要跟大家分享的是一个叫bat https://github.com/sharkdp/bat的命令工具。

这个工具主要采用 Rust编写, 它可以说是Linux里cat的克隆和增强版。

安装方法 https://github.com/sharkdp/bat#installation

#Fedora
sudo dnf install bat

# Windows
# Windows没有 choco的可以直接去 https://github.com/sharkdp/bat/releases 下载 bat-*-x86_64-pc-windows-msvc.zip
choco install bat

# Mac
brew install bat

如果你不想看文章内容,只看这里就是,添加以下配置到.zshrc(或.bashrc):

#bat https://github.com/sharkdp/bat
export BAT_STYLE=plain
export BAT_THEME="TwoDark"
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
export MANROFFOPT="-c"

好了,到此,本文的5秒钟版本就已经结束了。

关于名称

bat(中文可以译为“蝙蝠”),因为它功能跟cat类似,但是在cat的基本上有增强功能,所以就取名bat吧(b在c前面), 而cat可以翻译成猫的意思。 作者原文是“A cat(1) clone with wings. ”, 即带翅膀的克隆猫。 需要注意的是,cat的本意取不是取自猫,而是单词concatenate的缩写,而concatenate一般是“连接”的意思。

比如很多年前电脑书上流传的隐藏zip文件到图片里面, 这算是一种文件连接的操作:

cat mypic.jpg files.zip > amazing.jpg

主要亮点

1. 语法高亮

作为程序员,大部分时候其实cat的文件都源码和配置文件, 这个时候bat用处可大了。 其高亮功能主要是使用了 syntect这个crate, 值得庆幸的是,syntect并没有自己发明轮子, 而是复用了 Sublime Text的语法高亮定义. 好处显而易见, 可以兼容现有的ST高亮主题,或者稍做转换就可以拿来用。

如果你想查看下bat支持哪些主题,也很简单,直接执行bat --list-themes 即可,自带高亮效果显示,如下图: bat-list-themes-cmd-2020-05-14-23-48-52.png

一些配色展示:

bat-syntax-hi-3-2020-05-14-23-45-37.png

在它支持的配色里面(没有老灯最喜欢的Gruvbox),老灯比较喜欢TwoDark这个配色. 比较方便的是,bat支持使用环境变量来配置一些东西,比如老灯在~/.zshrc中是这样配置的:

export BAT_STYLE=plain
export BAT_THEME="TwoDark"

使用 plain 主要是避免bat在每列前面输出tab,因为默认是这样的:

bat-default-style-2020-05-15-00-12-53.png

老灯比较喜欢plain,简洁一些: bat-style-plain-2020-05-15-00-13-23.png

用bat高亮显示curl下载的shell脚本内容:

curl -fsSL https://deno.land/x/install/install.sh | bat

2. Git集成

如果你需要查看git修改内容,则 BAT_STYLE 配置至少要包含 changes:

bat-style-changes-2020-05-15-00-15-38.png

3. 显示非打印字符

bat-show-non-printable-2020-05-15-00-18-35.png

4. 自动paging

这个分页我觉得还是不翻译好,所以就用了paging 如果是cat, 它会直接输出文件的所有输出,这个对于脚本来说无疑是必要的功能。 但是如果是人在终端查看一些东西呢?我们其实一次只能看一屏。所以,bat它会自动分页。 当计算到内容大于一屏时,它就会通过管道调用less来显示了.

如果要自定义pager, 可以这样:

export BAT_PAGER="less -RFX"

5. 跟其它工具集成

当然,bat 也能像 cat 一样连接文件。

Oh.. you can also use it to concatenate files wink. Whenever bat detects a non-interactive terminal (i.e. when you pipe into another process or into a file), bat will act as a drop-in replacement for cat and fall back to printing the plain file contents.

这里要说一下, 官方说可以用作Git的diff工具,这里老灯倾向于推荐 diffr而不是使用这个cat的替代品。 毕竟术业有专攻。

man

bat可以作为man的pager,然后将man高亮显示:

export MANPAGER="sh -c 'col -bx | bat -l man -p'"
export MANROFFOPT="-c"

为什么要设置了MANROFFOPT="-c"?如果遇到显示问题,比如像这样配色显示有问题,且多出了很多1m0m之类的乱码:

bat-as-man-pager-problem-2020-05-15-01-02-21.png

加上MANROFFOPT="-c"就没问题了:

bat-as-man-pager-2020-05-15-01-00-39.png

这个man有了bat之后,真是炫。

其它的集成,老灯表示用处不是很大,感兴趣的可以自行去官网查看 https://github.com/sharkdp/bat#integration-with-other-tools


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK