Zoxide - 更智能的目录跳转工具

Zoxide 是一个更智能的 cd 命令,它会记住你最常使用的目录,让你能够用更少的按键快速跳转。

简介

Zoxide 是 autojumpz 等 tools 的现代替代品,使用 Rust 编写。它采用 frecency(frequency + recency)算法,综合访问频率和最近访问时间来排序目录,让常用目录更容易被找到。

主要特点

  • 跨 Shell 支持:支持 Bash、Zsh、Fish、PowerShell 等主流 Shell
  • 智能排序:基于访问频率和时间智能排序搜索结果
  • 快速模糊匹配:只需输入目录名的部分字符即可跳转
  • 交互式搜索:支持与 fzf 集成进行交互式目录选择
  • 轻量高效:Rust 编写,响应速度快

安装

macOS

1# Homebrew(推荐)
2brew install zoxide
3
4# MacPorts
5port install zoxide
6
7# Cargo
8cargo install zoxide --locked

Linux

 1# Debian/Ubuntu
 2apt install zoxide
 3
 4# Arch Linux/Manjaro
 5pacman -S zoxide
 6
 7# Fedora
 8dnf install zoxide
 9
10# Nix
11nix-env -iA nixpkgs.zoxide

其他方式

1# asdf
2asdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git
3asdf install zoxide latest
4
5# Conda
6conda install -c conda-forge zoxide

Shell 集成

安装后需要在 Shell 配置文件中添加初始化命令。

Bash

编辑 ~/.bashrc

1eval "$(zoxide init bash)"

Zsh

编辑 ~/.zshrc

1eval "$(zoxide init zsh)"

Fish

编辑 ~/.config/fish/config.fish

1zoxide init fish | source

Nushell

编辑 $env.NU_LIB_DIRS 中的配置文件:

1zoxide init nushell | save -f ~/.zoxide.nu

然后在配置中添加:

1source ~/.zoxide.nu

POSIX Shell

适用于 dash、sh 等:

1eval "$(zoxide init posix --hook prompt)"

初始化选项

1# 使用 z 命令替代 cd(推荐)
2eval "$(zoxide init bash --cmd z)"
3
4# 同时保留 z 和 zi 命令
5eval "$(zoxide init bash --cmd z)"
6
7# 自定义命令名称
8eval "$(zoxide init bash --cmd cd)"  # 替换原 cd

基本使用

添加目录到数据库

1# 访问目录时自动添加(需要 Shell 集成)
2cd /path/to/project
3
4# 手动添加目录
5zoxide add /path/to/project
6
7# 添加多个目录
8zoxide add ~/projects ~/work ~/documents

跳转目录

 1# 基本跳转(使用完整或部分路径)
 2z project        # 跳转到包含 "project" 的目录
 3z proj           # 模糊匹配也有效
 4z /usr/lo        # 跳转到 /usr/local
 5
 6# 跳转到子目录
 7z project src    # 跳转到 project 下的 src 目录
 8
 9# 跳转到家目录
10z
11
12# 返回上一个目录
13z -
14
15# 使用绝对路径
16z /etc/nginx

交互式搜索

使用 zi 命令配合 fzf 进行交互式选择:

1# 安装 fzf
2brew install fzf        # macOS
3apt install fzf         # Debian/Ubuntu
4
5# 交互式搜索
6zi
7
8# 带过滤条件的交互式搜索
9zi project

管理数据库

 1# 查看数据库中的目录
 2zoxide query -l
 3
 4# 查看带分数的目录列表
 5zoxide query -l -s
 6
 7# 搜索目录
 8zoxide query project
 9
10# 移除目录
11zoxide remove /path/to/project
12
13# 编辑数据库(打开数据库文件编辑)
14zoxide edit

命令详解

zoxide add

添加目录到数据库或增加其排名。

1zoxide add /path/to/dir     # 添加指定目录
2zoxide add .                # 添加当前目录
3zoxide add ~/projects       # 支持路径展开

zoxide query

搜索数据库中的目录。

1zoxide query foo            # 搜索包含 foo 的目录
2zoxide query -l             # 列出所有目录
3zoxide query -l -s          # 列出所有目录及分数
4zoxide query --exclude ~ foo # 排除特定目录
5zoxide query -i foo         # 交互式搜索(需要 fzf)

zoxide remove

从数据库中移除目录。

1zoxide remove /path/to/dir  # 移除指定目录
2zoxide remove foo           # 移除匹配的目录

zoxide edit

直接编辑数据库文件,可用于批量管理。

1zoxide edit                 # 使用 $EDITOR 打开数据库

zoxide init

生成 Shell 初始化脚本。

1zoxide init bash            # 生成 Bash 初始化脚本
2zoxide init zsh --cmd j     # 使用 j 作为命令名
3zoxide init fish            # 生成 Fish 初始化脚本

zoxide import

从其他工具导入数据。

1# 从 autojump 导入
2zoxide import --from autojump
3
4# 从 z 导入
5zoxide import --from z

环境变量配置

变量说明默认值
_ZO_DATA_DIR数据文件存储路径~/.local/share/zoxide (Linux) / ~/.local/share/zoxide (macOS)
_ZO_ECHO设为 1 时,跳转前打印目标目录未设置
_ZO_EXCLUDE_DIRS排除的目录列表(glob 格式)未设置
_ZO_FZF_OPTS传递给 fzf 的自定义选项未设置
_ZO_MAXAGE目录的最大存活时间(秒)9000
_ZO_RESOLVE_SYMLINKS设为 1 时,存储时解析符号链接未设置

配置示例

 1# ~/.bashrc 或 ~/.zshrc
 2
 3# 设置数据目录
 4export _ZO_DATA_DIR="$HOME/.zoxide"
 5
 6# 跳转前显示目标目录
 7export _ZO_ECHO=1
 8
 9# 排除特定目录
10export _ZO_EXCLUDE_DIRS="$HOME/.cache:$HOME/.config:$HOME/tmp"
11
12# 配置 fzf 选项
13export _ZO_FZF_OPTS="--height 40% --reverse --border"
14
15# 设置最大存活时间(10天)
16export _ZO_MAXAGE=864000

高级用法

排除目录

避免将临时目录或缓存目录加入数据库:

1# 在 Shell 配置中添加
2export _ZO_EXCLUDE_DIRS="$HOME/.cache:$HOME/tmp:$HOME/Downloads"

配合 fzf 自定义搜索

1# 使用预览功能
2export _ZO_FZF_OPTS="
3  --height 80%
4  --layout=reverse
5  --preview='ls -la {}'
6  --preview-window=right:50%:wrap
7"

从其他工具迁移

1# 从 autojump 迁移
2zoxide import --from autojump
3
4# 从 z 迁移
5zoxide import --from z
6
7# 从 z.lua 迁移
8zoxide import --from zlua

在脚本中使用

1#!/bin/bash
2# 获取目录路径而不跳转
3dir=$(zoxide query project)
4echo "Project directory: $dir"
5
6# 切换目录
7cd "$(zoxide query project)"

与 tmux 配合

1# 在 tmux 新窗口中打开目录
2tmux new-window -c "$(zoxide query project)"

工作原理

Zoxide 使用 frecency 算法(frequency + recency):

  1. 频率(Frequency):访问次数越多,分数越高
  2. 最近访问(Recency):最近访问的目录获得更高权重

分数计算公式使常用目录保持在列表顶部,而长时间未访问的目录会逐渐降低排名。

常见问题

zoxide 和 autojump 有什么区别?

特性zoxideautojump
语言RustPython
速度更快较慢
依赖Python
数据库格式二进制JSON
交互式搜索原生支持需要额外配置

如何重置数据库?

1rm -rf ~/.local/share/zoxide
2# 或使用配置的数据目录
3rm -rf "$_ZO_DATA_DIR"

如何查看当前数据库内容?

1zoxide query -l -s

参考资源