Zoxide

zoxide #

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 startedInstallationConfigurationIntegrations

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

    The recommended way to install zoxide is via the install script:

    curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
    

    Or, you can use a package manager:

    DistributionRepositoryInstructions
    Anycrates.iocargo install zoxide --locked
    Anyasdfasdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git
    asdf install zoxide latest
    Anyconda-forgeconda install -c conda-forge zoxide
    AnyLinuxbrewbrew install zoxide
    Alpine Linux 3.13+Alpine Linux Packagesapk add zoxide
    Arch LinuxArch Linux Communitypacman -S zoxide
    CentOS 7+Coprdnf copr enable atim/zoxide
    dnf install zoxide
    Debian 11+1Debian Packagesapt install zoxide
    Devuan 4.0+1Devuan Packagesapt install zoxide
    Fedora 32+Fedora Packagesdnf install zoxide
    GentooGURU Overlayeselect repository enable guru
    emerge --sync guru
    emerge app-shells/zoxide
    Manjaropacman -S zoxide
    NixOS 21.05+nixpkgsnix-env -iA nixpkgs.zoxide
    openSUSE TumbleweedopenSUSE Factoryzypper install zoxide
    Parrot OS1apt install zoxide
    Raspbian 11+1Raspbian Packagesapt install zoxide
    Slackware 15.0+[SlackBuilds]Instructions
    Ubuntu 21.04+1Ubuntu Packagesapt install zoxide
    Void LinuxVoid Linux Packagesxbps-install -S zoxide
    macOS

    To install zoxide, use a package manager:

    RepositoryInstructions
    crates.iocargo install zoxide --locked
    Homebrewbrew install zoxide
    asdfasdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git
    asdf install zoxide latest
    conda-forgeconda install -c conda-forge zoxide
    MacPortsport install zoxide

    Or, run this command in your terminal:

    curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
    
    Windows

    The recommended way to install zoxide is via winget:

    winget install zoxide
    

    Or, you can use an alternative package manager:

    RepositoryInstructions
    crates.iocargo install zoxide --locked
    Chocolateychoco install zoxide
    conda-forgeconda install -c conda-forge zoxide
    Scoopscoop install zoxide
    BSD

    To install zoxide, use a package manager:

    DistributionRepositoryInstructions
    Anycrates.iocargo install zoxide --locked
    DragonFly BSDDPortspkg install zoxide
    FreeBSDFreshPortspkg install zoxide
    NetBSDpkgsrcpkgin install zoxide
    Android

    To install zoxide, use a package manager:

    RepositoryInstructions
    Termuxpkg install zoxide
  2. Setup zoxide on your shell

    To start using zoxide, add it to your shell.

    Bash

    Add this to your configuration (usually ~/.bashrc):

    eval "$(zoxide init bash)"
    
    Elvish

    Add this to your configuration (usually ~/.elvish/rc.elv):

    eval (zoxide init elvish | slurp)
    

    Note zoxide only supports elvish v0.18.0 and above.

    Fish

    Add this to your configuration (usually ~/.config/fish/config.fish):

    zoxide init fish | source
    
    Nushell

    Add this to your env file (find it by running $nu.env-path in Nushell):

    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):

    source ~/.zoxide.nu
    

    Note zoxide only supports Nushell v0.73.0 and above.

    PowerShell

    Add this to your configuration (find it by running echo $profile in PowerShell):

    • For zoxide v0.8.0+:

      Invoke-Expression (& {
          $hook = if ($PSVersionTable.PSVersion.Major -lt 6) { 'prompt' } else { 'pwd' }
          (zoxide init --hook $hook powershell | Out-String)
      })
      
    • For older versions of zoxide:

      Invoke-Expression (& {
          $hook = if ($PSVersionTable.PSVersion.Major -lt 6) { 'prompt' } else { 'pwd' }
          (zoxide init --hook $hook powershell) -join "`n"
      })
      
    Xonsh

    Add this to your configuration (usually ~/.xonshrc):

    execx($(zoxide init xonsh), 'exec', __xonsh__.ctx, filename='zoxide')
    
    Zsh

    Add this to your configuration (usually ~/.zshrc):

    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 your configuration:

    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:

    zoxide import --from=autojump "/path/to/autojump/db"
    

    The path usually varies according to your system:

    OSPathExample
    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.txtC:\Users\Alice\AppData\Roaming\autojump\autojump.txt
    fasd, z, z.lua, zsh-z

    Run this command in your terminal:

    zoxide import --from=z "path/to/z/db"
    

    The path usually varies according to your system:

    PluginPath
    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:

    $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:

  • --cmd
    • Changes the prefix of the z and zi commands.
    • --cmd j would change the commands to (j, ji).
    • --cmd cd would replace the cd command (doesn’t work on Nushell / POSIX shells).
  • --hook <HOOK>
    • Changes how often zoxide increments a directory’s score:
      HookDescription
      noneNever
      promptAt every shell prompt
      pwdWhenever the directory is changed
  • --no-cmd
    • Prevents zoxide from defining the z and zi commands.
    • These functions will still be available in your shell as __zoxide_z and __zoxide_zi, should you choose to redefine them.

Environment variables #

Environment variables2 can be used for configuration. They must be set before zoxide init is called.

  • _ZO_DATA_DIR
    • Specifies the directory in which the database is stored.
    • The default value varies across OSes:
      OSPathExample
      Linux / BSD$XDG_DATA_HOME or $HOME/.local/share/home/alice/.local/share
      macOS$HOME/Library/Application Support/Users/Alice/Library/Application Support
      Windows%LOCALAPPDATA%C:\Users\Alice\AppData\Local
  • _ZO_ECHO
    • When set to 1, z will print the matched directory before navigating to it.
  • _ZO_EXCLUDE_DIRS
    • Excludes the specified directories from the database.
    • This is provided as a list of globs, separated by OS-specific characters:
      OSSeparatorExample
      Linux / macOS / BSD:$HOME:$HOME/private/*
      Windows;$HOME;$HOME/private/*
    • By default, this is set to "$HOME".
  • _ZO_FZF_OPTS
    • Custom options to pass to fzf during interactive selection. See man fzf for the list of options.
  • _ZO_MAXAGE
    • Configures the aging algorithm, which limits the maximum number of entries in the database.
    • By default, this is set to 10000.
  • _ZO_RESOLVE_SYMLINKS
    • When set to 1, z will resolve symlinks before adding directories to the database.

Third-party integrations #

ApplicationDescriptionPlugin
clinkImproved cmd.exe for Windowsclink-zoxide
emacsText editorzoxide.el
felixFile managerNatively supported
joshutoFile managerNatively supported
lfFile managerSee the wiki
nnnFile managernnn-autojump
rangerFile managerranger-zoxide
telescope.nvimFuzzy finder for Neovimtelescope-zoxide
ttmux session managerNatively supported
tmux-session-wizardtmux session managerNatively supported
vim / neovimText editorzoxide.vim
xplrFile managerzoxide.xplr
xxhTransports shell configuration over SSHxxh-plugin-prerun-zoxide
zabbFinds the shortest possible query for a pathNatively supported
zsh-autocompleteRealtime completions for zshNatively 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↩︎