Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - DannyBen/fuzzycd: Change directories with fuzzy match · GitHub
Skip to content

Repository files navigation

A bash function that patches the native cd to allow changing directories instantly using a fuzzy match, with or without an interactive menu.

Fuzzy CD

repocard

Features

  • Preserves the native cd completion.
  • Understands CDPATH.
  • Remembers all visited directories.
  • Allows changing directory to any directory from the history that matches the input fuzzy search (unless it matches an actual directory).
  • Shows available choices with ls preview, when there are more than one matches (optional).
  • Does not override the builtin cd when running non-interactively.
  • Adds flags such as cd -l to view and manage the history.
  • Three operation modes:
    • Minimal - cd to best match
    • Interactive
    • Interactive with ls preview
  • Optional bash completions that prefer native cd matches before fuzzy history.

Prerequisites

Fuzzy CD requires a recent version of fzf.

Installation

Installing using the setup script

Use the setup script for automatic installation. It installs fuzzycd and adds the required shell startup hook.

$ curl -Ls get.dannyb.co/fuzzycd/setup | bash

Installing with Homebrew

$ brew install dannyben/tap/fuzzycd

Installing manually

  1. Place the fuzzycd file somewhere on your PATH and make it executable.
  2. Source it from your startup script (for example: source /usr/local/bin/fuzzycd in ~/.bashrc).

Usage

Show Usage Patterns
$ cd -h
Usage:
cd DIR change working directory
cd SEARCH change working directory or show selection menu
cd -l list history with fzf
cd -e edit history file
cd -s show history file
cd -p prune non-existent directories from history
cd -d [DIR] delete current or specified directory from history
cd -c show completions function [usage: eval "$(cd -c)"]
cd -v show version
cd -h show this help
Environment Variables:
FUZZYCD_HISTORY_FILE
Path to history file (default: ~/.fuzzycd-history)
FUZZYCD_MODE
Set operation mode (one of: m, i, p)
m = minimal, non interactive, always cd to best match (default)
i = interactive when needed, no preview
p = interactive when needed, with ls preview
FUZZYCD_COMPLETIONS_COUNT
Maximum number of suggestions to show in bash completions
(default: 10)
Interactive Keyboard Bindings:
Del
Delete selected directory from history

First, verify that Fuzzy CD is properly installed by running:

$ cd -h

Now, you can use cd normally to change to any directory. These directories will be remembered in a history file. You can view this file by running:

$ cd -s
# or
$ cat ~/.fuzzycd-history

Fuzzy search

Use cd with a string that is not a directory. If exactly one directory in the history matches this string, you will instantly cd to it as usual.

If more than one directories match, you will be prompted to choose one of the matching directories when running in interactive mode, or you will cd to the best match when running in non-interactive mode (default).

Bash completions

If you install using the setup script, fuzzy bash completions are enabled automatically for Bash.

If you install manually, add the following line to your ~/.bashrc:

eval"$(fuzzycd -c)"

These completions keep Bash's native cd matches first and then append fuzzy history matches without duplicates.

This works best when tab completion is configured for inline completions, which you can set by adding/updating the ~/.inputrc file:

# ~/.inputrc
TAB: menu-complete

Uninstall

Use the uninstall script for automatic removal:

$ curl -Ls get.dannyb.co/fuzzycd/uninstall | bash

Or remove it manually:

  1. Remove the line that sources fuzzycd from your startup script.
  2. Remove the eval "$(fuzzycd -c)" line from your startup script, if you added it manually.
  3. Delete the fuzzycd executable from your PATH.
  4. Optionally, delete the history file (~/.fuzzycd-history).
  5. Restart your session.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.

Tests are split into two layers:

  • test/approve keeps exact-output approval coverage and low-level shell assertions.
  • features/ contains Shellkin acceptance scenarios for the main user-facing flows.

Run them with op test, or run the acceptance layer alone with op acceptance.


This repository is part of the Bash Productivity Suite

About

Change directories with fuzzy match

Topics

Resources

Stars

32 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages