{"id":13495308,"url":"https://github.com/gsamokovarov/jump","last_synced_at":"2025-05-14T01:09:57.664Z","repository":{"id":36538205,"uuid":"40844023","full_name":"gsamokovarov/jump","owner":"gsamokovarov","description":"Jump helps you navigate faster by learning your habits. ✌️","archived":false,"fork":false,"pushed_at":"2025-02-20T11:22:57.000Z","size":3301,"stargazers_count":1832,"open_issues_count":2,"forks_count":60,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-04-12T14:14:48.466Z","etag":null,"topics":["autojump","bash","fish","fuzzy","zsh"],"latest_commit_sha":null,"homepage":"http://gsamokovarov.com/jump","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gsamokovarov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-16T22:07:17.000Z","updated_at":"2025-04-10T08:56:31.000Z","dependencies_parsed_at":"2024-05-22T14:28:07.451Z","dependency_job_id":"76757948-af48-4042-8da0-b00c151edf99","html_url":"https://github.com/gsamokovarov/jump","commit_stats":{"total_commits":416,"total_committers":20,"mean_commits":20.8,"dds":"0.055288461538461564","last_synced_commit":"9866dea593b4079c896ba955e54646d21e5d87b0"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsamokovarov%2Fjump","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsamokovarov%2Fjump/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsamokovarov%2Fjump/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gsamokovarov%2Fjump/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gsamokovarov","download_url":"https://codeload.github.com/gsamokovarov/jump/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254049128,"owners_count":22006005,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autojump","bash","fish","fuzzy","zsh"],"created_at":"2024-07-31T19:01:33.384Z","updated_at":"2025-05-14T01:09:52.654Z","avatar_url":"https://github.com/gsamokovarov.png","language":"Go","funding_links":[],"categories":["工具库`可以提升效率的通用代码库和工具`","Utilities","开源类库","Command-Line Productivity","Go","Open source library","Other","bash","公用事业公司","工具库","Utility"],"sub_categories":["查询语","Utility/Miscellaneous","终端工具","Terminal Tools","HTTP Clients","Fail injection","实用程序/Miscellaneous","Directory Navigation"],"readme":"\u003cp align=\"right\"\u003e\n  \u003ca href=\"https://github.com/gsamokovarov/jump/releases\"\u003e[releases]\u003c/a\u003e\n\u003c/p\u003e\n\n**Jump** integrates with your shell and learns about your navigational habits by\nkeeping track of the directories you visit. It gives you the most visited\ndirectory for the shortest search term you type.\n\n![Demo](./assets/demo.svg)\n\n## Installation\n\nJump comes in packages for the following platforms.\n\n| Platform | Command |\n| --- | --- |\n| macOS | `brew install jump` or `port install jump` |\n| Linux | `sudo snap install jump` |\n| Nix | `nix-env -iA nixpkgs.jump` |\n| Go | `go install github.com/gsamokovarov/jump@latest` |\n\n\u003cdetails\u003e\n\u003csummary\u003eLinux distribution specific packages\u003c/summary\u003e\n\n| Distribution | Command |\n| --- | --- |\n| Void | `xbps-install -S jump` |\n| Ubuntu | `wget https://github.com/gsamokovarov/jump/releases/download/v0.51.0/jump_0.51.0_amd64.deb \u0026\u0026 sudo dpkg -i jump_0.51.0_amd64.deb` |\n| Debian | `wget https://github.com/gsamokovarov/jump/releases/download/v0.51.0/jump_0.51.0_amd64.deb \u0026\u0026 sudo dpkg -i jump_0.51.0_amd64.deb` |\n| Fedora | `wget https://github.com/gsamokovarov/jump/releases/download/v0.51.0/jump-0.51.0-1.x86_64.rpm \u0026\u0026 sudo rpm -i jump-0.51.0-1.x86_64.rpm` |\n\n\u003c/details\u003e\n\n### Integration\n\nYou are using Jump through its shell helper function, `j`. To get it, you have\nto integrate Jump with your shell.\n\n#### bash / zsh\n\nAdd the line below in `~/.bashrc`, `~/bash_profile` or `~/.zshrc`:\n\n```bash\neval \"$(jump shell)\"\n```\n\n#### fish\n\nAdd the line below in `~/.config/fish/config.fish`:\n\n```\njump shell fish | source\n```\n\n#### PowerShell\n\nAdd the line below needs to your profile, located by typing `$PROFILE`:\n\n```\nInvoke-Expression (\u0026jump shell pwsh | Out-String)\n```\n\nOnce integrated, Jump will automatically monitor directory changes and start\nbuilding an internal database.\n\n#### Murex\n\nJump bindings can be installed directly from Murex:\n\n```\nmurex-package install https://github.com/lmorg/murex-module-jump.git\n```\n\nPlease note that this doesn't install `jump` itself. You will still need to\ninstall the `jump` executable using the installation instructions above.\n\n### But `j` is not my favorite letter!\n\nThis is fine, you can bind jump to `z` with the following integration command:\n\n```bash\neval \"$(jump shell --bind=z)\"\n```\n\nTyping `z dir` would just work! This is only an example, you can bind it to\n_anything_. If you are one of those persons that likes to type a lot with their\nfingers, you can do:\n\n```bash\neval \"$(jump shell --bind=goto)\"\n```\n\nVoila! `goto dir` becomes a thing. The possibilities are endless!\n\n## Usage\n\nOnce integrated, **jump** introduces the **j** helper. It accepts only search\nterms, and as a design goal, there are no arguments for **j**. Whatever you give\nit, it's treated as a search term.\n\n**Jump** uses fuzzy matching to find the desired directory to jump to. This\nmeans that your search terms are patterns that match the desired directory\napproximately rather than exactly. Typing **2** to **5** consecutive characters\nof the directory name is all that **jump** needs to find it.\n\n### Regular jump\n\nThe default search behavior of **jump** is to match the\ndirectory name of a score. The match is case insensitive.\n\nIf you visit the directory `/Users/genadi/Development/rails/web-console` often,\nyou can jump to it by:\n\n```bash\n$ j wc      # or...\n$ j webc    # or...\n$ j console # or...\n$ j b-c     # or...\n```\n\nUsing jump is all about saving keystrokes. However, if you made the effort to\ntype a directory base name exactly, **jump** will try to find the exact match,\nrather than a fuzzy search.\n\n```bash\n$ j web-console\n$ pwd\n/Users/genadi/Development/rails/web-console\n```\n\n### Deep jump\n\nGiven the following directories:\n\n```bash\n/Users/genadi/Development/society/website\n/Users/genadi/Development/chaos/website\n```\n\nTyping `j site` matches only the base names of the directories. The base name\nof `/Users/genadi/Development/society/website` is `website`, the same as the\nother absolute path above. The jump above will land on the most-scored path,\nwhich is the `society` one, however, what if we wanted to land on the `chaos`\nwebsite?\n\n```bash\n$ j ch site\n$ pwd\n/Users/genadi/Development/chaos/website\n```\n\nThis instructs **jump** to look for a `site` match inside that is preceded by a\n`ch` match in the parent directory. The search is normalized only on the last\ntwo parts of the target paths. This will ensure a better match because of the\nshorter path to a fuzzy match.\n\nThere are no depth limitations, though and a jump to\n`/Users/genadi/Development/society/website` can look like this:\n\n```bash\n$ j dev soc web\n$ pwd\n/Users/genadi/Development/society/website\n```\n\nEvery space passed to `j` is converted to an OS separator. The last\nsearch term can be expressed as:\n\n```bash\n$ j dev/soc/web\n$ pwd\n/Users/genadi/Development/society/website\n```\n\n## Reverse jump\n\nBad jumps happen. Sometimes, we're looking for a directory that doesn't have the\nbest score at the moment. Let's work with the following following jump database:\n\n```bash\n/Users/genadi/Development/society/website\n/Users/genadi/Development/chaos/website\n/Users/genadi/Development/hack/website\n```\n\nTyping `j web` would lead to:\n\n```bash\n$ j web\n$ pwd\n/Users/genadi/Development/society/website\n```\n\nIf we didn't expect this result, instead of another search term, typing **j**\nwithout any arguments, will instruct **jump** to go to the second-best match.\n\n```bash\n$ j\n$ pwd\n/Users/genadi/Development/chaos/website\n```\n\n### Case-sensitive jump\n\nTo trigger a case-sensitive search, use a term that has a capital letter.\n\n```bash\n$ j Dev\n$ pwd\n/Users/genadi/Development\n```\n\nThe jump will resolve to `/Users/genadi/Development` even if there is\n`/Users/genadi/Development/dev-tools` that scores better.\n\n### Pins\n\nFor various reasons, Jump may not always find the directory you want, but don't worry—you can make it work!\n\nA pin forces an input to always go to a specific location. If you want j r to always go to /Users/genadi/development/rails, you can do:\n\n```\n$ cd /Users/genadi/development/rails\n$ jump pin r\n$ cd\n$ j r # Skips the scoring and goes straight to the pinned directory.\n$ pwd\n/Users/genadi/development/rails\n```\n\nNotice the `jump` command instead of the `j` shell function helper. `j` will always treat its input as search terms. It may apply some heuristics to how the input looks, but it will never accept arguments or switches. Here is where the `jump` command comes in. It is bundled with lots of helpers to make your `j` life easier. The pins are one of them.\n\nTry `jump --help` for all those hidden (**not** not-documented ones) features.\n\n## Is it like autojump or z?\n\nI was an avid autojump user, but it wasn't forgiving my sloppy fingers. That\npushed me to create Jump with the goal of accepting fuzzy search terms. This\nlets you type a couple of letters and go to your project:\n\n`j web` vs `j website`\n\nThe fuzzy typing is your fingers-friendly. You can make a typo, and the jump\nwould mostly work:\n\n`j wwebsite`\n\nAs a design goal, the `j` helper doesn't have any arguments. It's all about the search\nterm. That said, you can use the search term itself to hint jump about the desired directory.\n\nTyping mixed case input would force a case-sensitive match:\n\n`j Dev` would prefer /Users/genadi/Development\n\nIf you have multiple projects with the same name in umbrella directories you\ncan hint with OS separators:\n\n`j soc/web` -\u003e /society/website\n`j ra/web` -\u003e /raketa/website\n\nIf your input doesn’t give you the right dir, you can `j`. That will jump to\nthe next entry with the previous input.\n\nLittle hand-tuned details like those let `jump` read my mind with zero LLMs\ninteraction. If I wasn't a humble developer, I'd call it artisan\nhard-crafted software, but I am, so I'll let you call it what you want. 😄\n\n## Migrate from `autojump` or `z`\n\nYou can import your datafile from `autojump` or `z` with:\n\n```bash\n$ jump import\n```\n\nThis will try `z` first, then `autojump`, so you can even combine all the\nentries from both tools.\n\nThe command is safe to run on a pre-existing jump database, because if an entry\nexist in jump already, it won't be imported, and its score will remain\nunchanged. You can be explicit and choose to import `autojump` or `z` with:\n\n```bash\n$ jump import autojump\n$ jump import z\n```\n\n## Thanks! 🙌\n\nThank you for stopping by and showing your interest in Jump!\n\n[man]: http://gsamokovarov.com/jump\n[Go workspace]: https://golang.org/doc/code.html#Workspaces\n[conversation]: https://twitter.com/hkdobrev/status/838398833419767808\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgsamokovarov%2Fjump","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgsamokovarov%2Fjump","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgsamokovarov%2Fjump/lists"}