Jump helps you navigate faster by learning your habits. ✌️
go get github.com/gsamokovarov/jumpJump
Jump integrates with your shell and learns where you go. It tracks the directories you visit and lets you jump to the right one with just a few fuzzy-typed characters.
Installation
Packages are available on the following platforms:
| Platform | Command |
|---|---|
| macOS | brew install jump or port install jump |
| Linux | sudo snap install jump |
| Nix | nix-env -iA nixpkgs.jump |
| Go | go install github.com/gsamokovarov/jump@latest |
Linux distribution packages
| Distribution | Command |
|---|---|
| Arch | sudo yay -S jump |
| Ubuntu / Debian | wget https://github.com/gsamokovarov/jump/releases/download/v0.67.0/jump_0.67.0_amd64.deb && sudo dpkg -i jump_0.67.0_amd64.deb |
| Fedora | wget https://github.com/gsamokovarov/jump/releases/download/v0.67.0/jump-0.67.0-1.x86_64.rpm && sudo rpm -i jump-0.67.0-1.x86_64.rpm |
| Void | xbps-install -S jump |
Or install the latest release for the current user into ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/gsamokovarov/jump/main/install.sh | bash
Shell Integration
Jump is used through its helper function – j by default. Add it to your shell:
bash / zsh
eval "$(jump shell)"
fish
jump shell fish | source
PowerShell
Invoke-Expression (&jump shell pwsh | Out-String)
Nushell
jump shell nushell | save --append $nu.config-path
Murex
murex-package install https://github.com/lmorg/murex-module-jump.git
Jump begins tracking directories automatically once integrated.
Custom binding
The letter j is the default binding for Jump. But if that's not your jam, you can customize it to your liking.
eval "$(jump shell --bind=z)"
eval "$(jump shell --bind=goto)"
Or bind it directly to cd:
eval "$(jump shell --bind=cd)"
Typing cd project now performs a fuzzy jump.
Usage
Summary (Quick Examples)
j wc # Fuzzy Jump
j web-console # Exact Match
j dev/soc/web # Deep Jump
j ch site # Multi-Part Match
j app/ # Relative Jump
j . # Repo Root
j . cable # Based Mode
j - # cd -
j .. # cd ..
j ../.. # cd ../..
j # Reverse Jump
j Dev # Case-Sensitive
That was a quick overview of how j behaves. The sections below explain each feature with landing paths.
Regular jump
j wc # -> /Users/genadi/Development/rails/web-console
j console # -> /Users/genadi/Development/rails/web-console
j b-c # -> /Users/genadi/Development/rails/web-console
j web-console # -> /Users/genadi/Development/rails/web-console (exact)
Deep jump
j ch site # -> /Users/genadi/Development/chaos/website
j dev/soc/web # -> /Users/genadi/Development/society/website
Spaces and slashes work interchangeably.
Based Mode
j . cable # -> /Users/genadi/Development/rails/rails/actioncable
j . actionview/app # -> /Users/genadi/Development/rails/rails/actionview/app
j . # -> /Users/genadi/Development/rails/rails
Useful for monorepos with many repeated directory names.
Based mode determines the base directory using this priority:
$JUMP_BASED_PATHenvironment variable- Git repository root (detected via
git rev-parse --show-toplevel) - Current directory (fallback when no git repo is detected)
This means j . works even outside git repositories, simply using the current directory as the base.
Relative Jump
If your input contains or ends with a slash, Jump checks for a relative directory.
# In /Users/genadi/Development/rails/rails
j actioncable/ # -> ./actioncable
j actionpack/app # -> ./actionpack/app
Jump also mirrors familiar shell movements:
j - # -> previous directory
j .. # -> parent directory
j ../.. # -> grandparent directory
If the relative path does not exist, Jump falls back to fuzzy search.
Reverse jump
j web # -> /Users/genadi/Development/society/website
j # -> /Users/genadi/Development/chaos/website
Case-sensitive jump
j Dev # -> /Users/genadi/Development
Pins
cd /Users/genadi/development/rails
jump pin r
j r # -> /Users/genadi/development/rails
List and remove pins:
jump pins
jump unpin r
Database Tools
jump clean # remove stale entries
jump forget # forget current directory
jump top # ranked directories
jump top --score # ranked directories with numeric scores
jump top dev # fuzzy filtered list
Importing from autojump, z or zoxide
jump import
jump import autojump
jump import z
jump import zoxide
Imports merge into your existing database without overwriting scores.
Why Jump?
Cause it's good!