ajeetdsouza / zoxide

A smarter cd command. Supports all major shells.
MIT License
20.29k stars 518 forks source link
autojump bash cli command-line command-line-tool elvish fasd fish fish-shell fzf hacktoberfest jump nushell powershell rust shell xonsh xontrib z zsh
Special thanks to:
Warp
Warp is a modern, Rust-based terminal with AI built in so you and your team can build great software, faster.
Visit warp.dev to learn more.

# zoxide [![crates.io][crates.io-badge]][crates.io] [![Downloads][downloads-badge]][releases] [![Built with Nix][builtwithnix-badge]][builtwithnix] zoxide is a **smarter cd command**, inspired by z and autojump. It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes.
zoxide works on all major shells. [Getting started](#getting-started) • [Installation](#installation) • [Configuration](#configuration) • [Integrations](#third-party-integrations)

Getting started

Tutorial

z foo              # cd into highest ranked directory matching foo
z foo bar          # cd into highest ranked directory matching foo and bar
z foo /            # cd into a subdirectory starting with foo

z ~/foo            # z also works like a regular cd command
z foo/             # cd into relative path
z ..               # cd one level up
z -                # cd into previous directory

zi foo             # cd with interactive selection (using fzf)

z foo<SPACE><TAB>  # show interactive completions (zoxide v0.8.0+, bash 4.4+/fish/zsh only)

Read more about the matching algorithm here.

Installation

zoxide can be installed in 4 easy steps:

  1. Install binary

    zoxide runs on most major platforms. If your platform isn't listed below, please open an issue.

    Linux / WSL > The recommended way to install zoxide is via the install script: > > ```sh > curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh > ``` > > Or, you can use a package manager: > > | Distribution | Repository | Instructions | > | ------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------- | > | **_Any_** | **[crates.io]** | `cargo install zoxide --locked` | > | _Any_ | [asdf] | `asdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git`
    `asdf install zoxide latest` | > | _Any_ | [conda-forge] | `conda install -c conda-forge zoxide` | > | _Any_ | [guix] | `guix install zoxide` | > | _Any_ | [Linuxbrew] | `brew install zoxide` | > | _Any_ | [nixpkgs] | `nix-env -iA nixpkgs.zoxide` | > | Alpine Linux 3.13+ | [Alpine Linux Packages] | `apk add zoxide` | > | Arch Linux | [Arch Linux Extra] | `pacman -S zoxide` | > | CentOS 7+ | [Copr] | `dnf copr enable atim/zoxide`
    `dnf install zoxide` | > | ~Debian 11+~[^1] | ~[Debian Packages]~ | ~`apt install zoxide`~ | > | Devuan 4.0+ | [Devuan Packages] | `apt install zoxide` | > | Exherbo Linux | [Exherbo packages] | `cave resolve -x repository/rust`
    `cave resolve -x zoxide` | > | Fedora 32+ | [Fedora Packages] | `dnf install zoxide` | > | Gentoo | [Gentoo Packages] | `emerge app-shells/zoxide` | > | Manjaro | | `pacman -S zoxide` | > | openSUSE Tumbleweed | [openSUSE Factory] | `zypper install zoxide` | > | ~Parrot OS~[^1] | | ~`apt install zoxide`~ | > | ~Raspbian 11+~[^1] | ~[Raspbian Packages]~ | ~`apt install zoxide`~ | > | Rhino Linux | [Pacstall Packages] | `pacstall -I zoxide-deb` | > | Slackware 15.0+ | [SlackBuilds] | [Instructions][slackbuilds-howto] | > | Solus | [Solus Packages] | `eopkg install zoxide` | > | ~Ubuntu 21.04+~[^1] | ~[Ubuntu Packages]~ | ~`apt install zoxide`~ | > | Void Linux | [Void Linux Packages] | `xbps-install -S zoxide` |
    macOS > To install zoxide, use a package manager: > > | Repository | Instructions | > | --------------- | ----------------------------------------------------------------------------------------------------- | > | **[crates.io]** | `cargo install zoxide --locked` | > | **[Homebrew]** | `brew install zoxide` | > | [asdf] | `asdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git`
    `asdf install zoxide latest` | > | [conda-forge] | `conda install -c conda-forge zoxide` | > | [MacPorts] | `port install zoxide` | > | [nixpkgs] | `nix-env -iA nixpkgs.zoxide` | > > Or, run this command in your terminal: > > ```sh > curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh > ```
    Windows > zoxide works with PowerShell, as well as shells running in Cygwin, Git > Bash, and MSYS2. > > The recommended way to install zoxide is via `winget`: > > ```sh > winget install ajeetdsouza.zoxide > ``` > > Or, you can use an alternative package manager: > > | Repository | Instructions | > | --------------- | ------------------------------------- | > | **[crates.io]** | `cargo install zoxide --locked` | > | [Chocolatey] | `choco install zoxide` | > | [conda-forge] | `conda install -c conda-forge zoxide` | > | [Scoop] | `scoop install zoxide` | > > If you're using Cygwin, Git Bash, or MSYS2, you can also use the install script: > > ```sh > curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh > ```
    BSD > To install zoxide, use a package manager: > > | Distribution | Repository | Instructions | > | ------------- | --------------- | ------------------------------- | > | **_Any_** | **[crates.io]** | `cargo install zoxide --locked` | > | DragonFly BSD | [DPorts] | `pkg install zoxide` | > | FreeBSD | [FreshPorts] | `pkg install zoxide` | > | NetBSD | [pkgsrc] | `pkgin install zoxide` | > > Or, run this command in your terminal: > > ```sh > curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash > ```
    Android > To install zoxide, use a package manager: > > | Repository | Instructions | > | ---------- | -------------------- | > | [Termux] | `pkg install zoxide` | > > Or, run this command in your terminal: > > ```sh > curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash > ```
  2. Setup zoxide on your shell

    To start using zoxide, add it to your shell.

    Bash > Add this to the **end** of your config file (usually `~/.bashrc`): > > ```sh > eval "$(zoxide init bash)" > ```
    Elvish > Add this to the **end** of your config file (usually `~/.elvish/rc.elv`): > > ```sh > eval (zoxide init elvish | slurp) > ``` > > **Note** > zoxide only supports elvish v0.18.0 and above.
    Fish > Add this to the **end** of your config file (usually > `~/.config/fish/config.fish`): > > ```fish > zoxide init fish | source > ```
    Nushell > Add this to the **end** of your env file (find it by running `$nu.env-path` > in Nushell): > > ```sh > zoxide init nushell | save -f ~/.zoxide.nu > ``` > > Now, add this to the **end** of your config file (find it by running > `$nu.config-path` in Nushell): > > ```sh > source ~/.zoxide.nu > ``` > > **Note** > zoxide only supports Nushell v0.89.0+.
    PowerShell > Add this to the **end** of your config file (find it by running > `echo $profile` in PowerShell): > > ```powershell > Invoke-Expression (& { (zoxide init powershell | Out-String) }) > ```
    Xonsh > Add this to the **end** of your config file (usually `~/.xonshrc`): > > ```python > execx($(zoxide init xonsh), 'exec', __xonsh__.ctx, filename='zoxide') > ```
    Zsh > Add this to the **end** of your config file (usually `~/.zshrc`): > > ```sh > eval "$(zoxide init zsh)" > ``` > > For completions to work, the above line must be added _after_ `compinit` is > called. You may have to rebuild your completions cache by running > `rm ~/.zcompdump*; compinit`.
    Any POSIX shell > Add this to the **end** of your config file: > > ```sh > eval "$(zoxide init posix --hook prompt)" > ```
  3. Install fzf (optional)

    fzf is a command-line fuzzy finder, used by zoxide for completions / interactive selection. It can be installed from here.

    Note zoxide only supports fzf v0.33.0 and above.

  4. Import your data (optional)

    If you currently use any of these plugins, you may want to import your data into zoxide:

    autojump > Run this command in your terminal: > > ```sh > zoxide import --from=autojump "/path/to/autojump/db" > ``` > > The path usually varies according to your system: > > | OS | Path | Example | > | ------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------ | > | Linux | `$XDG_DATA_HOME/autojump/autojump.txt` or `$HOME/.local/share/autojump/autojump.txt` | `/home/alice/.local/share/autojump/autojump.txt` | > | macOS | `$HOME/Library/autojump/autojump.txt` | `/Users/Alice/Library/autojump/autojump.txt` | > | Windows | `%APPDATA%\autojump\autojump.txt` | `C:\Users\Alice\AppData\Roaming\autojump\autojump.txt` |
    fasd, z, z.lua, zsh-z > Run this command in your terminal: > > ```sh > zoxide import --from=z "path/to/z/db" > ``` > > The path usually varies according to your system: > > | Plugin | Path | > | ---------------- | ----------------------------------------------------------------------------------- | > | fasd | `$_FASD_DATA` or `$HOME/.fasd` | > | z (bash/zsh) | `$_Z_DATA` or `$HOME/.z` | > | z (fish) | `$Z_DATA` or `$XDG_DATA_HOME/z/data` or `$HOME/.local/share/z/data` | > | z.lua (bash/zsh) | `$_ZL_DATA` or `$HOME/.zlua` | > | z.lua (fish) | `$XDG_DATA_HOME/zlua/zlua.txt` or `$HOME/.local/share/zlua/zlua.txt` or `$_ZL_DATA` | > | zsh-z | `$ZSHZ_DATA` or `$_Z_DATA` or `$HOME/.z` |
    ZLocation > Run this command in PowerShell: > > ```powershell > $db = New-TemporaryFile > (Get-ZLocation).GetEnumerator() | ForEach-Object { Write-Output ($_.Name+'|'+$_.Value+'|0') } | Out-File $db > zoxide import --from=z $db > ```

Configuration

Flags

When calling zoxide init, the following flags are available:

Environment variables

Environment variables[^2] can be used for configuration. They must be set before zoxide init is called.

Third-party integrations

Application Description Plugin
aerc Email client Natively supported
alfred macOS launcher alfred-zoxide
clink Improved cmd.exe for Windows clink-zoxide
emacs Text editor zoxide.el
felix File manager Natively supported
joshuto File manager Natively supported
lf File manager See the wiki
nnn File manager nnn-autojump
ranger File manager ranger-zoxide
telescope.nvim Fuzzy finder for Neovim telescope-zoxide
t tmux session manager Natively supported
tmux-session-wizard tmux session manager Natively supported
vim / neovim Text editor zoxide.vim
xplr File manager zoxide.xplr
xxh Transports shell configuration over SSH xxh-plugin-prerun-zoxide
yazi File manager Natively supported
zabb Finds the shortest possible query for a path Natively supported
zsh-autocomplete Realtime completions for zsh Natively supported

[^1]: Debian / Ubuntu derivatives update their packages very slowly. If you're using one of these distributions, consider using the install script instead.

[^2]: If you're not sure how to set an environment variable on your shell, check out the wiki.