常用 CLI 工具上 - 拥抱命令行系列之工具篇
前言
主要聚焦在全仿行工具,一些基础内容如终端的选择 iTerm2(macOS only)/Alacritty/Hyper/Tabby,各种的 shell 环境 bash/zsh/fish 等不在本文范围。
本文聚焦已经有了基础环境,通过下面的命令行工具提高日常的效率。本文基于 macOS 下的 zsh + oh-my-zsh 为基础环境。下面大部分工具都支持 macOS 和各种版本的 Linux,部分支持 Windows。
替换原用工具方法
使用编辑工具打开 ~/.bashrc 或者 ~/.zshrc 在文件中增加别名映射,如
alias ls='lsd'
使用 lsd 命令替换原有 ls,当输入 ls 时会自动调用 lsd,如需临时使用原命令在前面加上 \ 输入 \ld 即可。
⚠️ 使用别名后,由于参数和输出和原命令不能完全兼容,可能会造成部分 shell 脚本执行出错,按需使用。
常用工具
lsd
{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/Peltoche/lsd

用 Rust 重写了 ls 命令并且增加了很多特性,如颜色、图标、树形结构、更多格式化的选项等。
普通用户可直接使用,进阶用户可查看更详细的配置内容 和定制主题 内容。
安装
因为使用了 Nerd 字体显示图标,所以终端首先需要安装和配置使用 Nerd Font。
接下来安装命令
# macOS
brew install lsd
Windows 及各种 Linux 可查看官方安装方式。
使用
用法基本和 ls 一致,列几个常见参数:-l 每个文件或文件夹一行的长信息方式显示-a 显示当前文件夹的隐藏文件或文件夹-t 以修改时间排序显示文件或文件夹-r 反转排序-d 只显示文件夹--tree 树形结构显示文件或文件夹
# 以长格式显示当前文件夹的所有文件和文件夹,包含隐藏文件
lsd -la
# 以修改时间倒序(晚修改的文件显示在后)长格式显示当前文件夹的文件和文件夹
lsd -ltr
# 以长格式只显示文件夹
lsd -ld */
# 以树形结构显示当前文件夹
lsd --tree
可选配置
替换 ls 命令
alias ls='lsd'
# other further
alias l='ls -l'
alias la='ls -a'
alias lla='ls -la'
alias lt='ls --tree'
类似工具
exa
{macOS/Linux | 免费/开源}
Github: https://github.com/ogham/exa

因为没有文件的图标显示,所以不需要依赖特殊字体。目前暂不支持 Windows 目前只有一个初步实现在进行中 Initial support for Windows #820 ,看起来还需要很长时间。
bat
{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/sharkdp/bat

同样以 Rust 语言克隆的 cat 工具,具备各种编程和标记语言的语法高亮,和 git 的整合展示,显示非打印字符及自动分页等功能。
安装
# macOS
brew install bat
Windows 及各种 Linux 可查看官方安装方式。
使用
用法基本和 cat 一致,列几个常见参数:-A 显示无法打印的字符,像空格、tab 和换行等-p 最普通的风格,没有文件名、行号等装饰,只有语法高亮-P 禁用自动分页-L 显示支持语法高亮的语言列表-l 指定文件使用特定的语法高亮
# 一般使用
bat ${filename}
# 普通风格显示文件
bat -p ${filename}
# 指定 markdown 格式的语法高亮,特别针对没有后缀的文件
bat -l markdown ${filename}
# 类似 cat 的功能,文件的合并
bat ${file1} ${file2} > ${file}
# 管道(pipline)操作等
curl -s https://sh.rustup.rs | bat
操作方式和 Vim 基本一致:q 退出预览j 下移一行k 上移一行Ctrl+d / Space 下翻页Ctrl+u 上翻页g 跳到文件头部G 跳到文件结尾:{Num} 跳到对应行/{String} 搜索对应文字,在搜索中 n 下一个搜索结果,N 上一个搜索结果
可选配置
替换 cat 命令
alias cat='bat'
tldr
{Windows/macOS/Linux | 免费/开源}
官网: https://tldr.sh/
Github: https://github.com/tldr-pages/tldr
Demo: https://tldr.ostera.io/

依赖社区维护的简化版 man 页面,tldr 代表的是“Too Long; Didn't Read”。
安装
# macOS 安装
brew install tldr
# Node.js 环境下
npm install -g tldr
# python3 环境下
pip3 install tldr
使用
常用的参数:-u 更新本地页面-p 选择特定的页面平台 android|linux|osx|sunos|windows
使用也非常简单
tldr ${command}
可选配置
为了方便记忆配置了 help 的映射
alias help='tldr'
类似工具
eg
{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/srsudar/eg

帮助内容比 tldr 更充实提供了很多案例,但是支持的命令要少一些。
cheat
{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/cheat/cheat

帮助内容也比较丰富,但是不是彩色显示,同时支持的命令也偏少。
ag
{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/ggreer/the_silver_searcher

ag 是 Ack 的一个克隆,但是比 Ack 快一个数量级,同时也支持通过定义 .gitignore、.hgighnore 和 .ignore 跳过特定的文件,命令 ag 比 ack 也要短 33%(难怪命令和仓库名 the silver searcher 差这么多)。
同时它还能很方便的和编辑器 Vim(插件 ack.vim) 以及 Emacs(插件 ag.el) 进行整合。
安装
# macOS
brew install the_silver_searcher
Windows 及各种 Linux 可查看官方安装方式。
使用
部分常用参数:-g 只匹配文件名-G 只搜索名字匹配的文件-l 只显示包含该内容的文件名-L 打印不包含该内容的文件-s 大小写敏感
# 搜索包含 ${string} 内容的文件,并会打印出文件名和包含该内容的行
ag ${string}
# 在 ${path} 路径中搜索包含 ${string} 内容的文件
ag ${string} ${path}
# 只搜索文件名包含 ${string} 的文件
ag -g ${string}
# 只在文件名包含 ${filename} 的文件中,搜索包含 ${string} 的文件,且大小写敏感
ag -s ${string} -G ${filename}