コンテンツにスキップ

Zoxide

frecencyアルゴリズムを使用して習慣を学習し、シェル間での高速なディレクトリナビゲーションを実現するスマートなcdコマンド。

コマンド説明
brew install zoxidemacOSにHomebrewでインストール
cargo install zoxide --lockedcrates.ioからインストール
apt install zoxideDebian/Ubuntuにインストール
pacman -S zoxideArch Linuxにインストール
dnf install zoxideFedoraにインストール
scoop install zoxideWindowsにScoopでインストール
winget install ajeetdsouza.zoxideWindowsにwingetでインストール
nix-env -i zoxideNixOSにインストール
conda install -c conda-forge zoxideCondaでインストール
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | shシェルスクリプトでインストール
コマンド説明
eval "$(zoxide init bash)"Bash用に初期化(.bashrcに追加)
eval "$(zoxide init zsh)"Zsh用に初期化(.zshrcに追加)
zoxide init fish | sourceFish用に初期化(config.fishに追加)
Invoke-Expression (& { (zoxide init powershell) })PowerShell用に初期化
zoxide init nushell | save -f ~/.zoxide.nuNushell用に初期化
eval "$(zoxide init elvish)"Elvish用に初期化
eval (zoxide init xonsh)Xonsh用に初期化
# Bash — ~/.bashrcに追加
eval "$(zoxide init bash)"

# Zsh — ~/.zshrcに追加
eval "$(zoxide init zsh)"

# Fish — ~/.config/fish/config.fishに追加
zoxide init fish | source

# PowerShell — $PROFILEに追加
Invoke-Expression (& { (zoxide init powershell | Out-String) })

# Nushell — env.nuに追加
zoxide init nushell | save -f ~/.zoxide.nu
source ~/.zoxide.nu
コマンド説明
z foo「foo」にマッチする最高ランクのディレクトリにジャンプ
z foo bar「foo」と「bar」の両方にマッチするディレクトリにジャンプ
z ~/projects正確なパスにジャンプ(cdと同様)
z ..親ディレクトリに移動
z -前のディレクトリに移動
zホームディレクトリに移動(引数なし)
zifzfでインタラクティブ選択
zi foo「foo」でプレフィルタしたインタラクティブ選択
z foo/サブディレクトリにジャンプ(末尾スラッシュ)
# ディレクトリを訪問すると、zoxideがそれを学習します
cd ~/projects/myapp          # zoxideにこのパスを教える
cd ~/documents/reports       # zoxideにこのパスを教える
cd /var/log/nginx            # zoxideにこのパスを教える

# 後で部分一致でジャンプ
z myapp                      # ~/projects/myappにジャンプ
z reports                    # ~/documents/reportsにジャンプ
z nginx                      # /var/log/nginxにジャンプ

# 複数キーワードで一致を絞り込み
z proj myapp                 # ~/projects/myappに特定してマッチ
z doc rep                    # ~/documents/reportsにマッチ
コマンド説明
z proj「proj」を含む任意のディレクトリにマッチ
z proj rust「proj」と「rust」の両方を含むディレクトリにマッチ
z /home/user/docs絶対パスを直接使用
z docs/「docs」というサブディレクトリを優先してマッチ
キーワードはパスコンポーネントにマッチ「proj」は/home/user/projectsにマッチ
最後のキーワードはプレフィックスにマッチ可能z prprojectsにマッチ
複数キーワードはANDマッチ全てがパスに含まれる必要がある
マッチングは大文字小文字を区別しないz PROJprojectsにマッチ
コンセプト説明
Frecency = 頻度 + 最新性訪問頻度と最近の訪問に基づくスコア
最近の訪問はスコアが高い今日訪問したディレクトリは先週のものよりスコアが高い
頻繁に訪問するディレクトリはランクが上がる定期的な使用で時間とともにスコアが上昇
スコアは時間とともに減衰する未使用のディレクトリは徐々にランクが下がる
データベースは低スコアを自動整理古い未使用のエントリは自動的に削除される
最大エントリ数は_ZO_MAXAGEで制御デフォルト:10,000エントリ
コマンド説明
zi追跡された全ディレクトリでfzfを開く
zi queryクエリでプレフィルタしたfzfを開く
fzf内で↑ / ↓結果をナビゲート
fzf内でEnter選択してディレクトリにジャンプ
fzf内でEscape選択をキャンセル
fzf内で入力してフィルタ結果をさらに絞り込み
fzfのインストールが必要インタラクティブモード用にfzfをインストール
fzf内でTab選択を切り替え(複数選択モード)
# 追跡された全ディレクトリでインタラクティブファジーファインダーを開く
zi

# 「project」を含むディレクトリにプレフィルタ
zi project

# fzfの出力形式はスコアを表示:
#   3.50   /home/user/projects/myapp
#   2.10   /home/user/projects/api
#   1.20   /var/www/project-site
コマンド説明
eval "$(zoxide init bash --cmd cd)"Bashでcdをzoxideに置き換え
eval "$(zoxide init zsh --cmd cd)"Zshでcdをzoxideに置き換え
--cmd cdcdコマンドを置き換えcdがzoxideを使用するようになる(cd、cdi)
--cmd jjjiを作成カスタムコマンド名を使用
デフォルトはzziを作成標準のzoxideコマンド
コマンド説明
--hook pwdディレクトリ変更時にデータベースを更新(デフォルト)
--hook promptプロンプトごとにデータベースを更新
--hook none自動追跡を無効化
# BashでcdをZoxideに置き換え
eval "$(zoxide init bash --cmd cd)"
# 'cd'がzoxideを使用、'cdi'でインタラクティブを開く

# カスタムコマンド名を使用
eval "$(zoxide init zsh --cmd j)"
# 'j foo'でジャンプ、'ji'でインタラクティブを開く

# fzfと組み合わせて体験を向上
export _ZO_FZF_OPTS="--height 40% --reverse --border"
コマンド説明
zoxide query fooジャンプせずにベストマッチを表示
zoxide query foo --listスコア付きで全マッチを一覧表示
zoxide query foo --scorefrecencyスコア付きでマッチを表示
zoxide query --allデータベース全体を一覧表示
zoxide query --all --scoreスコア付きでデータベースを一覧表示
zoxide query --exclude /path結果から特定のパスを除外
zoxide query --list | head -20上位20ディレクトリ
コマンド説明
zoxide add /path/to/dir手動でディレクトリをデータベースに追加
zoxide remove /path/to/dirデータベースからディレクトリを削除
zoxide edit$EDITORでデータベースを開く(インタラクティブ)
データベースは$_ZO_DATA_DIR/db.zoに保存デフォルトのデータベースの場所
# zoxideがマッチするものを確認
zoxide query project --list --score
# 出力:
#    12.00  /home/user/projects/webapp
#     8.50  /home/user/projects/api
#     3.20  /home/user/old-project

# 新しいマシン用にデータベースを手動でシード
zoxide add ~/projects/webapp
zoxide add ~/projects/api
zoxide add ~/.config/nvim

# 古いエントリを削除(削除されたディレクトリ)
zoxide query --all | while read -r dir; do
  [ -d "$dir" ] || zoxide remove "$dir"
done

# バックアップ用にデータベースをエクスポート
zoxide query --all --score > zoxide-backup.txt
コマンド説明
zoxide import --from z path/to/.zz.shデータベースからインポート
zoxide import --from autojump path/to/autojump.txtautojumpデータベースからインポート
zoxide import --merge --from z path/to/.zマージインポート(既存エントリを保持)
zoxide import --from z --merge ~/.z一般的なz.shインポート
# z.shからの移行(最も一般的)
zoxide import --from z ~/.z

# autojumpからの移行
zoxide import --from autojump ~/.local/share/autojump/autojump.txt

# 既存データベースとマージ(上書きしない)
zoxide import --merge --from z ~/.z

# インポート後に確認
zoxide query --all --score | head -20
コマンド説明
export _ZO_DATA_DIR="$HOME/.local/share/zoxide"データベースディレクトリを設定
export _ZO_ECHO=1ジャンプ前にマッチしたディレクトリを表示
export _ZO_EXCLUDE_DIRS="/tmp/*:/private/*"追跡からディレクトリを除外
export _ZO_FZF_OPTS="--height 40%"zi用のカスタムfzfオプション
export _ZO_MAXAGE=10000データベースの最大エントリ数を設定
export _ZO_RESOLVE_SYMLINKS=1保存前にシンボリックリンクを解決
# ~/.bashrc または ~/.zshrc — zoxideの完全な設定

# カスタムデータディレクトリを設定
export _ZO_DATA_DIR="$HOME/.local/share/zoxide"

# ジャンプ前にマッチしたディレクトリを表示
export _ZO_ECHO=1

# 一時ディレクトリとシステムディレクトリを除外
export _ZO_EXCLUDE_DIRS="$HOME:$HOME/Downloads:/tmp/*:/private/*"

# インタラクティブモードのfzf表示をカスタマイズ
export _ZO_FZF_OPTS="
  --height 40%
  --layout reverse
  --border rounded
  --preview 'ls -la {2..}'
  --preview-window right:40%
"

# 整理前の最大エントリ数(デフォルト: 10000)
export _ZO_MAXAGE=10000

# シンボリックリンクを正規パスに解決
export _ZO_RESOLVE_SYMLINKS=1

# zoxideを初期化(エクスポートの後に置く必要がある)
eval "$(zoxide init zsh)"
コマンド説明
z <Tab>追跡されたディレクトリから自動補完
z foo<Tab>マッチするディレクトリを補完
zoxide init経由のBash補完シェル初期化で自動設定
zoxide init経由のZsh補完シェル初期化で自動設定
zoxide init経由のFish補完シェル初期化で自動設定
  1. zoxideに自然に学習させる — 通常通りシェルを使用すれば、zoxideが習慣からデータベースを構築します。全てのディレクトリを手動でシードする必要はありません。

  2. 精度のために2つのキーワードを使用する — 複数のディレクトリがマッチする場合、2つ目のキーワードを追加しましょう:z proj apiz api単体よりも正確です。

  3. サブディレクトリには末尾スラッシュを使用するz foo/はカレントディレクトリの「foo」という名前のサブディレクトリを優先し、z fooはデータベース全体を検索します。

  4. 最大限の学習のためにcdを置き換える — シェルの初期化で--cmd cdを使用して、zを使うことを覚えている時だけでなく、全てのディレクトリ変更がzoxideにフィードされるようにしましょう。

  5. 除外設定を早めに行う_ZO_EXCLUDE_DIRSを設定して、一時ディレクトリ、ビルドフォルダ、結果を汚すnode_modulesパスをスキップしましょう。

  6. 曖昧なジャンプにはziを使用する — どのディレクトリがマッチするか不確かな場合、zi(インタラクティブ)を使って候補をプレビューし選択しましょう。

  7. 既存データを移行するz.shautojumpfasdから切り替える場合、zoxide importでデータベースをインポートして、ウォームキャッシュから開始しましょう。

  8. 古いエントリを整理するzoxide editやクリーンアップスクリプトを使って、削除されたディレクトリのエントリを定期的に削除し、結果の関連性を保ちましょう。

  9. データベースをバックアップする — OSの再インストールやマシンの移行前にzoxide query --all --scoreでエクスポートしましょう。

  10. fzfの外観をカスタマイズする_ZO_FZF_OPTS--preview 'ls {2..}'を設定して、インタラクティブピッカーでディレクトリの内容を表示しましょう。