我的终端环境:高效 shell 命令(一)之目录文件操作命令 exa、zoxide 与 bat

类 Unix 系统发展多年,不少老古董命令还在占据终端的绝大部分时间,而使用体验上却依然差强人意。

从本文开始,我将用一系列文章介绍提升终端效率的一系列命令,这些命令更具现代风格,希望能让你眼前一亮。

前言

正式开始前,先推荐一个 github 仓库 - modern-unix,其中收录了大量的更具现代风格的命令,可用于替换一大波老古董命令,在这个系列的最后一篇,我将会整体过下该仓库中的所有命令。

本系列将要介绍的命令,我大概可将其分为三个大类,分别是:文件目录查看相关的命令 - exazoxidebat,文件目录搜索相关的命令 - fdripgrepfzf ,HTTP Web 开发的相关命令 - entrhttpiejq

希望通过这些命令的学习,进一步提升我们的工作效率。

系列阅读:

更多待续...

本文是高效命令系列第一篇,将先介绍平时工作中最常用的与目录文件相关的命令:

  • exa,替换默认的 ls 命令;
  • zoxide,更智能地进行目录跳转,可替换默认的 cd 命令;
  • bat,与 cat 功能相似,但它支持语法高亮,实现了 git 的集成;

这三个命令直接替换掉最常用系统内置命令:ls、cd 与 cat。

注:exa 已停止维护,可用 eza 替代,它是基于 exa 的 fork 版本。安装命令:brew install eza。

exa

这是一款可用于替换系统默认 ls 的命令,在平时工作中 ls 几乎使用最多的命令,而 exa 在支持 ls 的基本能力基础上,提供了更丰富的特性。

快速安装

bash 复制代码
brew install exa

使用

案例 1 - exa 默认配色效果;

案例 2 - exa --icons 显示文件类型图标;

案例 3 - exa -alh --git 或 exa --all --long --header --git,显示文件列表详情,和 git 信息;

案例 4 - exa --tree --icons,显示文件树;

别名

通过别名将默认 ls 和 tree 命令替换为 exa;

bash 复制代码
# 默认显示 icons: 
alias ls="exa --icons"
# 显示文件目录详情
alias ll="exa --icons --long --header"
# 显示全部文件目录,包括隐藏文件
alias la="exa --icons --long --header --all"
# 显示详情的同时,附带 git 状态信息
alias lg="exa --icons --long --header --all --git"

# 替换 tree 命令
alias tree="exa --tree --icons"

如此一来,就将 exa 设置为系统默认 ls。

特别说明:别名生效后,如果还希望使用原始命令,可通过类似于 \command 的形式实现,如 \ls 将无效别名设置,直接使用系统内置 ls 命令。

zoxide

提前问自己一个问题,Linux 默认命令 cd 好不好用?我的答案是,相当难用,无论多么丝滑的操作,一旦遇到 cd,只能说一句 fuck。

bash 复制代码
cd ../
cd ../
cd ../
cd ../../../
cd x/
cd y/
cd z/

如果不想被 cd 折磨的话,我强烈推荐这个工具:zoxide

zoxide 是一款受到 z 和 autojump 启发而来的命令,它会记录访问过的目录,实现以 最最最最 少按键就能实现目录跳转。

注:前面的教程介绍了 oh-my-zsh 提供的 z 插件,zoxide 与 z 相比更易于使用。一份对比报告:zoxide vs zsh-z

安装

zsh 复制代码
brew install zoxide

配置

在 zsh 中使用 zoxide,通过一行命令将 zoxide 初始化命令追加到 ~/.zshrc 中,如下所示:

zsh 复制代码
## 通过 z 使用 zoxide
echo 'eval "$(zoxide init zsh --cmd z)"' >> ~/.zshrc
## 或直接替换 cd 命令
echo 'eval "$(zoxide init zsh --cmd cd)"' >> ~/.zshrc

我将会使用 zoxide 直接替换 cd 命令,即第二种配置方式。

使用

假设,有如下目录结构:

bash 复制代码
~/Hello
 |_ ./golang-examples
 |_ ./python-examples
 |_ ./rust-examples
 |_ ./trading-strategies

由于 zoxide 是通过历史访问路径的方式实现快速跳转的,要先准备数据。

如下命令初始化 zoxide 数据库:

zsh 复制代码
cd ~/Hello/golang-examples
cd ~/Hello/python-examples
cd ~/Hello/rust-examples
cd ~/Hello/trading-strategies

案例 1:cd golang-examples - 全名匹配;

案例 2:cd golang - 部分匹配;

案例 3:cd examples - 重名按算法选择最优目录;

案例 1、2、3 的演示效果如下所示:

{{< image 2023-10-28-high-productivity-shell-commands-part1-05.gif>}}

案例 4:cd examples + <Space>+<Tab>,进入交互选择模式;

除了通过 <Space>+<Tab> 实现交互选择模式,还可直接使用 cdi 命令实现,直接看案例 5;

案例 5:cdi examples 直接进入交互选择模式;

bat

bat 是一款支持语法高亮与集成 GIT,功能与 cat 相似的命令。

安装

zsh 复制代码
brew install bat

配置

bat 的默认效果在我的 Macos 系统下的 tmux 模式下主题显示不够友好,每次要在选项上要配置主题,类似 bat --theme=TwoDark main.py。实际上,bat 命令提供了配置文件的能力。

可通过 bat --list-themes 查看 bat 支持的主题列表。

首先,在 .zshrc 中设置 bat 配置文件位置环境变量。

bash 复制代码
export BAT_CONFIG_PATH="${XDG_CONFIG_HOME:-~/.config}/bat.conf"

生效后,执行如下命令将会生成配置文件:

zsh 复制代码
bat --generate-config-file

配置 bat 默认选项,将主题配置 --theme=TwoDark 启用,如下所示:

zsh 复制代码
# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes`
# for a list of all available themes
--theme=TwoDark

使用

案例 1:语法高亮效果与行号;

案例 2:集成 git 信息;

案例 3:和 cat 一样,一次性无分页输出文本;

zsh 复制代码
bat --pager='never' logger.go

对于习惯使用 cat 的模式,如希望默认不启用分页能力,可直接在配置文件增加 --paging=never

别名

觉得 bat 不错,想直接替换 cat 命令,在 zshrc 中配置别名即可,将默认 cat 命令,替换为 bat,如下所示:

bash 复制代码
alias cat='bat'

总结

本文介绍了三个命令,分别是 exa(eza)、zoxide 和 bat 的使用,让最常用最无聊的命令也能产生有趣的体验,实现使用效率的提升。

我的博文 - 我的终端环境:提升效率的 shell 命令(一)之目录文件命令 exa、zoxide 与 bat

相关推荐
吃杠碰小鸡26 分钟前
lodash常用函数
前端·javascript
emoji11111135 分钟前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼38 分钟前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_7482500343 分钟前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
AiFlutter1 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
麦兜*1 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue