A faster way to navigate your filesystem
zoxide
is a blazing fast alternative to cd
, inspired by
z
and z.lua
.
It keeps track of the directories you use most frequently, and uses a ranking algorithm
to navigate to the best match.
z foo # cd to highest ranked directory matching foo
z foo bar # cd to highest ranked directory matching foo and bar
z foo/ # can also cd into actual directories
zi foo # cd with interactive selection using fzf
zq foo # echo the best match, don't cd
za /foo # add /foo to the database
zr /foo # remove /foo from the database
yay -S zoxide
dnf copr enable atim/zoxide
dnf install zoxide
dnf install zoxide
pkg install zoxide
brew install zoxide
port install zoxide
nix-env -iA nixpkgs.zoxide
cargo install zoxide -f
Use the installation script:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/ajeetdsouza/zoxide/master/install.sh | sh
Alternatively, you can also download a precompiled binary from the
releases page and add it to
your PATH
.
If you want to use interactive fuzzy selection, you will also need to install
fzf
.
If you currently use z
, z.lua
, or zsh-z
, you may want to first import
your existing database into zoxide
:
zoxide import /path/to/db
Add the following line to your ~/.bashrc
:
eval "$(zoxide init bash)"
Add the following line to your ~/.config/fish/config.fish
:
zoxide init fish | source
Add the following line to your shell's configuration file:
eval "$(zoxide init posix --hook prompt)"
The prompt
hook is recommended for POSIX shells because the default pwd
hook creates a temporary file for every session, which are only deleted upon
reboot. If you do want to use pwd
hooks instead, you may want to set up traps
to perform a cleanup once the shell exits:
trap '_zoxide_cleanup' EXIT HUP KILL TERM
trap '_zoxide_cleanup; trap - INT; kill -s INT "$$"' INT
trap '_zoxide_cleanup; trap - QUIT; kill -s QUIT "$$"' QUIT
NOTE: If you modify your PS1
at any point, you may need to re-run the above
command. This is due to the fact that the hook is stored in PS1
, in order to
be evaluated every time the prompt is displayed.
Add the following line to your profile:
Invoke-Expression (& {
$hook = if ($PSVersionTable.PSVersion.Major -lt 6) { 'prompt' } else { 'pwd' }
(zoxide init --hook $hook powershell) -join "`n"
})
Add the following line to your ~/.zshrc
:
eval "$(zoxide init zsh)"
--cmd
: change thez
command (and corresponding aliases) to something else--hook <HOOK>
: change the event that adds a new entry to the database (default:pwd
)none
: never add entries (this will makezoxide
useless unless you manually configure a hook)prompt
: add an entry at every promptpwd
: add an entry whenever the current directory is changed
--no-aliases
: don't define extra aliases likezi
,zq
,za
, andzr
$_ZO_DATA_DIR
: directory wherezoxide
will store its data files (default: platform-specific; see thedirs
documentation for more information)$_ZO_ECHO
: when set to1
,z
will print the matched directory before navigating to it$_ZO_EXCLUDE_DIRS
: list of directories separated by platform-specific characters (":
" on Linux/macOS, ";
" on Windows) to be excluded from the database$_ZO_FZF_OPTS
: custom flags to pass tofzf
$_ZO_MAXAGE
: sets the maximum total age after which entries start getting deleted$_ZO_RESOLVE_SYMLINKS
: when set to1
,z add
will resolve symlinks.