TL;DR: the key bindings (Ctrl+R, Ctrl+T, Alt+C) are fzf as a shell tool. Piping any list of strings into fzf makes it a one-line interactive picker. This issue covers the workflows that build on those.
If you have not installed fzf and wired up the key bindings yet, start there — this issue assumes Ctrl+R, Ctrl+T, and Alt+C are all live at your shell prompt. The first issue about fzf covers the install and the bindings setup.
One pipe: list, fzf, act
The shift in thinking is that fzf is not just a shell widget. It is a generic fuzzy picker that takes any list of strings on stdin and gives you one back on stdout. So almost any "pick one of these" task becomes a one-liner.
The shape of the pipe is:
# <command that prints a list> | fzfA common example — pick a git branch:
git branch --all | grep -v HEAD | fzf | xargs git checkoutAnother example - pick a recent git commit to inspect:
git log --oneline -200 | fzf | awk '{print $1}' | xargs git showYou also have a workflow for previewing files. Pick a file in the current tree, see its contents in a preview window as you narrow:
git ls-files | fzf --preview 'cat {}'--preview '...' runs the given command for each highlighted entry, with {} substituted for the line. The result appears in a side pane. You stop when the preview shows the file you want, and press Enter.
The shape is always the same: <list command> | fzf [--preview ...] | <act on the picked line>. The pipe-and-pick pattern is the workhorse and everything below is variations on it.
Alt+C, the under-used one
Press Alt+C. A fuzzy directory picker opens. Type a few letters of the directory name, pick one, press Enter, and your shell cds into it.
This is the trick most people, including me, may under-use. You can filter the list of subdirectories of your current directory, pick one target from the matches and cd to it. Without it, you type the path, mistype a character, retype, etc.
Alt+C and zoxide's z overlap. If you have zoxide installed, z <fragment> is faster for "navigation jumps" you do often, because it learns from what you visit. Alt+C is a possible fallback, when used from a directory containing your targets: type the fragment, see the matches, pick. Use Alt+C when z does not find a match, or when you want to browse the candidates before jumping. The Modern CLI Stack book covers zoxide in detail; they are not competitors — they are for different jobs.
Filtering without the UI
Sometimes you do not want a TUI. You want fzf's matching algorithm in a script or a non-interactive pipeline. The flag is --filter:
git log --oneline --all | fzf --filter='fix' | head -1Note that while plain grep matches anywhere, fzf's fuzzy match scores by word position (start of a word, camelCase hump, after a delimiter) and rewards tight clusters.
If you want the full toolkit, download The Modern CLI Stack, which was just updated: a free ~50-page PDF + EPUB covering mise, starship, zoxide, fzf, broot, ripgrep, fd, bat, eza, delta, tldr, atuin, lazygit.
