Jump helps you navigate faster by learning your habits. ✌️

[releases]

Build Status Go Report Card

Jump integrates with your shell and learns about your navigational habits by keeping track of the directories you visit. It gives you the most visited directory for the shortest search term you type.

Demo

Installation

Jump comes in packages for the following platforms.

Platform Command
macOS brew install jump
Ubuntu wget https://github.com/gsamokovarov/jump/releases/download/v0.40.0/jump_0.40.0_amd64.deb && sudo dpkg -i jump_0.40.0_amd64.deb
Fedora wget https://github.com/gsamokovarov/jump/releases/download/v0.40.0/jump-0.40.0-1.x86_64.rpm && sudo rpm -i jump-0.40.0-1.x86_64.rpm
Void xbps-install -S jump
Nix nix-env -iA nixpkgs.jump
Go go install github.com/gsamokovarov/jump@latest

Integration

Jump needs to be integrated with the shell. For bash and zsh, the line below needs to be in ~/.bashrc, ~/bash_profile or ~/.zshrc:

eval "$(jump shell)"

For fish shell, put the line below needs to be in ~/.config/fish/config.fish:

jump shell fish | source

Once integrated, jump will automatically monitor directory changes and start building an internal database.

But j is not my favourite letter!

This is fine, you can bind jump to z, with this:

eval "$(jump shell --bind=z)"

And now, you can use jump like z dir and it would just work! This is only an example, you can bind it to anything. If you are one of those persons that likes to type a lot with their fingers, you can do:

eval "$(jump shell --bind=goto)"

Voila! goto dir becomes a thing. The possibilities are endless!

Usage

Once integrated, jump introduces the j helper. It accepts only search terms and as a design goal there are no arguments to j. Whatever you give it, it's treated as search term.

Jump uses fuzzy matching to find the desired directory to jump to. This means that your search terms are patterns that match the desired directory approximately rather than exactly. Typing 2 to 5 consecutive characters of the directory name is all that jump needs to find it.

Regular jump

The default search behavior of jump is to fuzzy match the directory name of a score. The match is case insensitive.

If you visit the directory /Users/genadi/Development/rails/web-console often, you can jump to it by:

$ j wc      # or...
$ j webc    # or...
$ j console # or...
$ j b-c     # or...

Using jump is all about saving key strokes. However, if you made the effort to type a directory base name exactly, jump will try to find the exact match, rather than fuzzy search.

$ j web-console
$ pwd
/Users/genadi/Development/rails/web-console

Deep jump

Given the following directories:

/Users/genadi/Development/society/website
/Users/genadi/Development/chaos/website

Typing j site matches only the base names of the directories. The base name of /Users/genadi/Development/society/website is website, the same as the other absolute path above. The jump above will land on the most scrored path, which is the society one, however what if we wanted to land on the chaos website?

$ j ch site
$ pwd
/Users/genadi/Development/chaos/website

This instructs jump to look for a site match inside that is preceded by a ch match in the parent directory. The search is normalized only on the last two parts of the target paths. This will ensure a better match, because of the shorter path to fuzzy match on.

There are no depth limitations though and a jump to /Users/genadi/Development/society/website can look like:

$ j dev soc web
$ pwd
/Users/genadi/Development/society/website

In fact, every space passed to j is converted to an OS separator. The last search term can be expressed as:

$ j dev/soc/web
$ pwd
/Users/genadi/Development/society/website

Reverse jump

Bad jumps happen. Sometimes we're looking for a directory that doesn't have the best score at the moment. Let's work with the following following jump database:

/Users/genadi/Development/society/website
/Users/genadi/Development/chaos/website
/Users/genadi/Development/hack/website

Typing j web would lead to:

$ j web
$ pwd
/Users/genadi/Development/society/website

If we didn't expect this result, instead of another search term, typing j without any arguments will instruct jump to go the second best match.

$ j
$ pwd
/Users/genadi/Development/chaos/website

Case sensitive jump

To trigger a case-sensitive search, use a term that has a capital letter.

$ j Dev
$ pwd
/Users/genadi/Development

The jump will resolve to /Users/genadi/Development even if there is /Users/genadi/Development/dev-tools that scores better.

Is it like autojump or z?

Yes, it is! You can import your datafile from autojump or z with:

$ jump import

This will try z first then autojump, so you can even combine all the entries from both tools.

The command is safe to run on pre-existing jump database, because if an entry exist in jump already, it won't be imported and it's score will remain unchanged. You can be explicit and choose to import autojump or z with:

$ jump import autojump
$ jump import z

If you want to know more about the difference between Jump, z, and autojump, check-out this Twitter conversation.

Thanks! 🙌

Thank you for stopping by and showing your interest in Jump!

Comments
  • Jump to a child directory

    Jump to a child directory

    autojump used to have a jc shortcut to only jump to children of the current directories.

    In #8 it was suggested that we could use / to distinguish among two parents, but I feel that if I'm in the current directory, I shouldn't need to distinguish it!

    Having a command that only looks into the children of current seems to make more sense.

    What are your thoughts?

  • Escaping hyphens and apostrophes and other

    Escaping hyphens and apostrophes and other

    Hi! Thanks for the excellent tool.

    I'm syncing some remote directories with Onedrive that have hyphens in their names. Jumping to these does not seem to work, at least on my MacOS installation. E.g. "j search" -> "j /some/remote/dirname - with hyphen/search". Whitespace alone seems to be handled fine, as in "j search" -> /some/dir with whitespace/search". I also noted that an apostrophe also does not work, as in "j search" -> "j /not/sure/why/you'd make a dirname like this but it's what I get".

    Is it possible to escape these odd but allowed characters in directory names?

  • Question: listing matches on tab completion not a design goal?

    Question: listing matches on tab completion not a design goal?

    Coming from j being aliased to fasd_cd, I'm trying out Jump to see if I like it more. I'm used to sometimes typing j someth<tab> to quickly go to a directory called "something" when there are multiple on my system and I don't want to think beforehand what the correct search terms would be.

    It seems this was a use-case for Jump in the past but it has been removed. Was that a design decision?

  • Install v0.23.0 on ubuntu 18.04, error: Merg`status file could not be parsed or opened.

    Install v0.23.0 on ubuntu 18.04, error: Merg`status file could not be parsed or opened.

    This happens on two computers of mine.

    $ sudo dpkg -i ./jump_0.23.0_amd64.deb 
    tar: Archive is compressed. Use -j option
    tar: Error is not recoverable: exiting now
    dpkg-deb: error: tar subprocess returned error exit status 2
    dpkg: error processing archive ./jump_0.23.0_amd64.deb (--install):
    dpkg-deb --control subprocess returned error exit status 2
    Errors were encountered while processing:
     ./jump_0.23.0_amd64.deb
    

    While the same command succed with v0.22.0

    $ sudo dpkg -i ./jump_0.22.0_amd64.deb 
    (Reading database ... 96811 files and directories currently installed.)
    Preparing to unpack ./jump_0.22.0_amd64.deb ...
    Unpacking jump (0.22.0) over (0.22.0) ...
    Setting up jump (0.22.0) ...
    Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
    

    My OS information: $ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.2 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.2 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic

  • Update installation instructions for Go

    Update installation instructions for Go

    Starting from Go 1.17, installing executables with go get is deprecated. In Go 1.18, go get doesn't build packages. See https://go.dev/doc/go-get-install-deprecation for reference.

  • Integration documentation outdated?

    Integration documentation outdated?

    When reading the README.md file it says that I should append eval "$(jump shell)" into my ~/.zshrc file. Yet, doing it and closing and opening the terminal does nothing, as if it wasn't done.

    And Jump suggests that I should run jump shell for Integrations. After doing so, it says:

    # Put the line below in ~/.zshrc:
    #
    #   eval "$(jump shell zsh)"
    #
    # The following lines are autogenerated:
    
    __jump_chpwd() {
      jump chdir
    }
    
    jump_completion() {
      reply="'$(jump hint "$@")'"
    }
    
    j() {
      local dir="$(jump cd $@)"
      test -d "$dir" && cd "$dir"
    }
    
    typeset -gaU chpwd_functions
    chpwd_functions+=__jump_chpwd
    
    compctl -U -K jump_completion j
    

    Should the documentation say -> add this eval "$(jump shell zsh)" instead? Or run jump shell the first time and follow the instructions?

    Have I missed anything? Thank you!

  • Evict Last Jump

    Evict Last Jump

    Feature Request: Evict last jump.

    I find myself running j target-dir; j all too often, and would like the ability to evict the first result returned by j target-dir so that I don't encounter it again in future.

  • AUR package for ArchLinux

    AUR package for ArchLinux

    There is an old AUR package here: https://aur.archlinux.org/packages/jump-git

    But it builds from source and hence requires Go toolchain to be setup on your machine.

    The release page only has .deb & .rpm files. If it also had the raw binary itself, then I could create an AUR package (it's pretty easy!)

    So this kind of depends on #16

  • windows builds

    windows builds

    Is it by design that the windows binary is not published for the latest couple of releases ?

    I've tried building from source on windows, and everything seems to work fine. It would be easier for windows users to grab the binary directly, instead of building from source.

  • Release the binary of jump v0.41.0 for macOS

    Release the binary of jump v0.41.0 for macOS

    Thank you for your great project! I have a request.

    https://github.com/gsamokovarov/jump/releases/tag/v0.41.0

    There is no binary of jump v0.41.0 for macOS.

    image

    On the other hand, there are binaries for macOS in v0.40.0 or earlier.

    https://github.com/gsamokovarov/jump/releases/tag/v0.40.0

    image

    Could you release the binary of v0.41.0 for macOS?

  • jump has stopped tracking my directories

    jump has stopped tracking my directories

    For some reason, jump no longer learns about the directories I visit.

    Running zsh-5.8-1, and jump r277.56fe5f8-1. eval "$(jump shell)" is present in .zshrc.

  • stricter jumps

    stricter jumps

    if i enter a path that doesn't exist in the jump db, i'd rather not jump, than jump to a seemingly random directory.

    eg j xyz -> jump to /home/james/dl ???

Gjg - Go jump goland tool

GJG go-jump-goland tool Allows you to launch quickly the Goland IDE and open pro

Mar 14, 2022
kubeaudit helps you audit your Kubernetes clusters against common security controls

kubeaudit helps you audit your Kubernetes clusters against common security controls

Dec 30, 2022
A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

Nov 22, 2021
Issue-mafia - An out-of-the-box CLI that helps you to easily synchronize Git hooks with a remote repository

issue-mafia is an out-of-the-box CLI that helps you to easily synchronize Git hooks with a remote repository.

Feb 14, 2022
Are you programming and suddenly your stomach is rumbling? No problem, order your Ifood without leaving your favorite text editor ❤️

vim-ifood Você ta programando e de repente bateu aquela fome? Sem problemas, peça seu Ifood sem sair do seu editor de texto favorito ❤️ Are you progra

Jun 2, 2022
Learning Vim and Vimscript doesn't have to be hard. This is the guide that you're looking for.
Learning Vim and Vimscript doesn't have to be hard. This is the guide that you're looking for.

Learn Vim (the Smart Way) What's This? Learn Vim (the Smart Way) is a guide to learn the good parts of Vim. There are many places to learn Vim: the vi

Jan 1, 2023
Got: Simple golang package and CLI tool to download large files faster 🏃 than cURL and Wget!

Got. Simple and fast concurrent downloader. Installation ❘ CLI Usage ❘ Module Usage ❘ License Comparison Comparison in cloud server: [root@centos-nyc-

Dec 29, 2022
Cleo CLI - do annoying stuff faster

Cleo CLI Installing Heroku CLI Most of Heroku functionality relies on Heroku CLI being present in your system. Go ahead and install it if you haven't

Dec 20, 2021
Allows you to use the magic remote on your webOS LG TV as a keyboard/mouse for your Linux machine

magic4linux Allows you to use the magic remote on your webOS LG TV as a keyboard/mouse for your PC Linux machine. This is a Linux implementation of th

Nov 25, 2022
CraftTalk Command Line Tool helps with managing CraftTalk releases on baremetal instances

ctcli - CraftTalk Command Line Tool Commands help Shows help version Shows version init Initializes specified root directory as a ctcli dir. ctcli --r

Jan 20, 2022
CLI for SendGrid, which helps in managing SSO users, can install and update users from yaml config

Sendgrid API This script is needed to add new users to SendGrid as SSO teammates. Previously, all users were manually added and manually migrating the

Jul 20, 2022
The Discord terminal client you never knew you wanted.
The Discord terminal client you never knew you wanted.

I AM CLOSING DOWN THE CORDLESS PROJECT Hey, so I know this is somewhat of a bummer, but I got banned because of ToS violation today. This seemed to be

Jan 7, 2023
yq lets you read YAML files easily on the terminal. You can find key/values easily
yq lets you read YAML files easily on the terminal. You can find key/values easily

yq yq lets you read YAML files easily on the terminal. You can find key/values easily. Motivation Reading yaml configurations for k8s file becomes ard

Nov 2, 2021
Golisp-wtf - A lisp interpreter (still just a parser) implementation in golang. You may yell "What the fuck!?.." when you see the shitty code.

R6RS Scheme Lisp dialect interpreter This is an implementation of a subset of R6RS Scheme Lisp dialect in golang. The work is still in progress. At th

Jan 7, 2022
a Go language free and open-source document for learning from zero level

Go document a GO language free and open-source document for learning from zero level Please publish and collaborate OPEN-SOURCE Sections About go lang

Jan 8, 2023
Creating a simple CLI tool in the Go Programming Language for personal learning and fun

Creating a simple CLI tool in the Go Programming Language for personal learning and fun Open to feedback :) Build docker dev environment docker build

Dec 12, 2021
Demonstrating how you can take an action to your intrusions detected by Falco using OpenFaaS functions
Demonstrating how you can take an action to your intrusions detected by Falco using OpenFaaS functions

Kubernetes Response Engine powered by OpenFaaS Although Falco can be used to detect any intrusion attempts and sends alerts to channels according to t

Aug 22, 2022
This is a command that simply prints "ok" onto your screen whenever you run the "ok" command
This is a command that simply prints

ok This is a command that simply prints "ok" onto your screen whenever you run the ok command Installation (Linux) Download the latest release and sud

Sep 16, 2022
A CLI tool that you can use create regular backups of your Notion.so Pages.

notion-offliner A CLI tool that you can use create regular backups of your Notion.so Pages. Perfect for disaster scenarios and offline usage. MacOS an

Jan 3, 2023