终端下的目录切换

Published:

2019/08/21

在 Linux 的终端中,我们使用的是 cd 命令来切换工作目录。当然,即便可以在 cd 的时 候使用 Tab 进行补全,但是依然会觉得很麻烦,因此有人开发了快速切换目录的工具,例 如 : z, autojump 等等。

我之前一直使用的是 z ,它是一个 Shell 脚本,代码量不过二百多行,简洁的同时不乏功能强大。

不过我在使用的过程中也发现了一些问题,下面列出两个我觉得最为突出的:

  1. 默认只能切换到 rank 值最高的目录,假设我想切换到 rank 值第二的目录就不行。

  2. 摸不清楚它的脾气,例如 A 和 B 目录的路径都包含了关键字 foo,使用 z foo 命令会切换到目录 B(因为 rank 高?),但我明明想切换到目录 A,我怎么能提前 知道 B 的 rank 值比 A 高呢?凭感觉?

其它的目录切换工具没有体验过,不过我觉得也都差不多吧?

思来想去还是自己造轮子,灵感来源与 Vim 中的 :edit 命令中使用 ** 以及 * 来实现模糊匹配(参见 :h file-searching )。

其实在 Bash 中有一个选项名叫 globstar,用 shopt -o globstar 命令开启之后, 也可以对路径进行模糊匹配:

If set, the pattern ** used in a pathname expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a /, only directories and subdirectories match.

有了这个条件,我写了一个 cd from list 的工具,名为 cdf ( cd from 的缩 写),可以从一系列的目录中选择想要的那个,进行切换。例如:

当然,这条命令使用起来要稍微麻烦一些,但是相比较 z 而言,我能明确得知道我最终要 切换到的是那个目录,而不会出现按下回车之后发现自己来错地方了,呵呵。

Thanks for reading :)