常用 CLI 工具上 - 拥抱命令行系列之工具篇

常用 CLI 工具上 - 拥抱命令行系列之工具篇
Photo by Gabriel Heinzer / Unsplash

前言

续篇:常用 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

lsd-screenshot
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

exa-screenshot
exa 截图

因为没有文件的图标显示,所以不需要依赖特殊字体。目前暂不支持 Windows 目前只有一个初步实现在进行中 Initial support for Windows #820 ,看起来还需要很长时间。

bat

{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/sharkdp/bat

bat-screenshot
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/

tldr-screenshot
tldr 截图

依赖社区维护的简化版 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

eg-screenshot
eg 截图

帮助内容比 tldr 更充实提供了很多案例,但是支持的命令要少一些。

cheat

{Windows/macOS/Linux | 免费/开源}
Github: https://github.com/cheat/cheat

cheat-screenshot
cheat 截图

帮助内容也比较丰富,但是不是彩色显示,同时支持的命令也偏少。

ag

{Windows/macOS/Linux | 免费/开源}
Github:  https://github.com/ggreer/the_silver_searcher

ag-screenshot
ag 截图

agAck 的一个克隆,但是比 Ack 快一个数量级,同时也支持通过定义 .gitignore.hgighnore.ignore 跳过特定的文件,命令 agack 也要短 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}