高效SHELL环境 step by step(二): 目录与文件

高效SHELL环境 step by step(一): 命令别名中讲了通过命令提示、命令补全与命令别名的方式减少输入提示键盘输入的速度。本节主要关注:目录与文件的快速定位。通过快速定位文件与目录达到提升操作效率。

1 目录

1.1 目录定位

能够快速定位目录的脚本项目很多,比较热门的项目是:

这几个项目功能都非常类似。装一个就可以了。以autojump为例子。首先通过

$: brew install autojump

进行安装。完成安装后,在oh-my-zsh中开启相应的插件autojump。测试其常用操作:

  • j 快速跳转到指定目录
  • jc 快速跳转到指定子目录
  • jo 快速通过图形界面打开目录

通过j -s查询缓存的检索目录优先级。

1.2 目录展示

常规进行目录展示的命令是ls,但其太过单薄,特别是对于嵌套较深子目录,要进行多次操作才能达到预期效果。这里介绍两个扩展命令:

MacOS安装:

$: brew install tree
$: brew install exa

tree命令功能比较单一, exa除了支持tree命令的功能外,在色彩展示以及文件详情上展示的信息更加丰富。

exa

为了方便自己使用,按各人喜好定义别名。

2 文件

对于文件的定位以及操作,应该尽量的靠近文件的位置,减少比必要的检索范围。在SHELL环境中通常所谓查询都是进行正则匹配。所以熟悉正则表达式非常重要。收集的以下正则表达式的教程非常适合所有级别的读者:

2.1 按名称检索

  • fd

    fd命令是对find命令的扩展。其在功能上与find命令类似,但操作接口更加友好。

2.2 按历史检索

fasd是将autojump命令原理扩展到了文件上,当然它也支持目录。autojump提供了关键的跳转命令j; fasd则提供四个关键命令:

  • f 文件快速检索
  • a 文件 + 目录快速检索
  • s 交互选择检索
  • d 目录快速检索

2.3 按内容检索

按文件内容检索系统提供的命令grep太古老,不论是展示上还是操作接口上都不够友好。以下扩展命令明显更加易于使用, 而且会在查询文件时使用 .gitignore 中的规则.

具体操作演示,可以通过 tldrman 命令查询一下。

2.4 文件操作

文件操作按行为可划分为: 文件预览、文件编辑、文件删除。按此类型划分,分别列举几个扩展命令。

文件预览

  • bat 该命令提供更加友好的图形展示,结合文件内容语法进行高亮展示, 同时支持git变更对比。

文件编辑

文件编辑命令实在太多了,有人喜欢 IDE, 有人喜欢命令行。贴一篇文章,很多编辑工具都罗列了。

删除文件

其实文件删除命令,系统提供的 rm 命令就非常好用。但该命令风险很高,万一一个不小心删错了就没有回头路了。所以有人写了下面这个工具:

提供的功能挺好的:

trash-put           trash files and directories.
trash-empty         empty the trashcan(s).
trash-list          list trashed files.
trash-restore       restore a trashed file.
trash-rm            remove individual files from the trashcan.

只是这个工具使用python写的安装过程有点费事,改天自己写一个纯SHELL版本。

2.5 从检索到操作

快速定位目录或者文件,再执行相应的操作,已经够快了。如果还想更快一点,推荐下面这个工具:

它可以将检索操作两个过程直接关联起来。先看一张预览图:

fzf

两个简单的使用例子:

# 预览
$: fzf --preview 'bat {}'

# 定位文件后,按F1开启编辑工具
$: fzf --bind 'f1:execute(vim {})'

3 小结

高效命令需要大量的实践练习,和对旧习惯的抛弃。