zoxide:记性好的 cd 命令

在终端里切换目录这件事,每个程序员每天都要做几十上百次。cd /very/long/path/to/project 这种操作打多了,手指都会抗议。zoxide 这个项目就是来解决这个问题的,3.7 万多个 Star 说明大家确实有这个需求。

简单说,zoxide 是一个替你记路的工具。你平时正常用 cd 切换目录就行,它会在后台默默记录你访问过哪些目录、访问了多少次。之后你想去某个目录,只需要输入路径里的几个关键词,它就能猜到你要去哪儿,直接跳过去。

正文顶部截图

它怎么工作的

zoxide 的核心是一套评分算法。每当你进入一个目录,这个目录的分数就会增加。用得越多的目录,分数越高。当你输入 z foo 的时候,它会在所有包含 “foo” 的目录里,挑分数最高的那个跳转。

这个设计有几个好处。第一,你不需要记住完整路径,只要记得目录名里包含什么关键词就行。第二,它会自动学习你的习惯,常用的目录自然排在前面。第三,如果你有多个包含相同关键词的目录,它会根据你的使用频率智能排序。

实际用起来大概是这样:

z foo              # 跳转到匹配 foo 的最高分目录
z foo bar          # 同时匹配 foo 和 bar
zi foo             # 用 fzf 弹出交互式选择列表

zi 命令特别实用,当你有好几个相似目录分不清的时候,它会列出所有匹配项让你手动选。

安装和配置

zoxide 用 Rust 写的,支持所有主流平台和 Shell。Linux、macOS、Windows、BSD 都能跑。Shell 方面,Bash、Zsh、Fish、PowerShell、Nushell 这些全都支持。

安装方式很多,最简单的是用各平台的包管理器。macOS 用 brew install zoxide,Windows 用 winget install ajeetdsouza.zoxide,Arch Linux 用 pacman -S zoxide。也可以直接从 crates.io 装:cargo install zoxide --locked

装完之后需要在 Shell 配置文件里加一行初始化命令。以 Zsh 为例,在 .zshrc 末尾加上:

eval "$(zoxide init zsh)"

这样就搞定了,之后正常用 cd 就行,zoxide 会自动在后台工作。

README区域截图

和同类工具比有什么不同

在 zoxide 之前,比较出名的同类工具有 z 和 autojump。zoxide 的作者明确说是受这两个工具启发的,但做了不少改进。

首先是性能。zoxide 用 Rust 写的,启动速度和查询速度都比 z(Shell 脚本)快不少。对于目录数据库比较大的用户来说,这个差距能感受到。

其次是跨平台支持更全。z 只支持 POSIX Shell,Windows 用户基本没法用。zoxide 原生支持 PowerShell 和 Windows,这对需要在多平台工作的人来说是个加分项。

还有一个细节,zoxide 支持从 z、autojump、fasd 等工具导入历史数据。如果你之前用的是其他工具,可以无缝迁移过来,不用从零开始积累。

实际体验

我自己用了一段时间,最明显的感受是打字少了。以前切换到项目目录要打一长串路径,现在 z proj 就到了。特别是那种深层嵌套的目录,省下来的按键次数很可观。

fzf 集成是另一个亮点。装了 fzf 之后,zi 命令会弹出一个模糊搜索界面,用方向键选就行。对于目录名相似的情况,这个比纯命令行好用很多。

环境变量配置也比较灵活。_ZO_EXCLUDE_DIRS 可以排除不想记录的目录,_ZO_MAXAGE 可以控制数据库大小,_ZO_ECHO 可以让跳转时显示目标路径。这些小功能加起来,让工具的可控性很强。

适合谁用

经常在终端里工作的人,尤其是项目多、目录层级深的开发者,装上这个基本就离不开了。运维、数据工程师这些需要频繁切换不同环境目录的岗位也很合适。

如果你之前用过 z 或 autojump,换到 zoxide 基本没有学习成本,命令习惯是一样的,只是底层更高效了。

如果你之前用过 z 或 autojump,换到 zoxide 基本没有学习成本,命令习惯是一样的,只是底层更高效了。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐