fzf is a general-purpose command-line fuzzy finder: it reads a list of lines, lets you filter interactively, and writes the selected line(s) to standard output. It does not search inside file contents by itself.
Use it when you already have (or can generate) a candidate list—file paths, history entries, process lines, host names—and need to pick one item quickly. Skip it when you need full-text search across file contents; pair a content searcher such as ripgrep with fzf only if you deliberately build that pipeline.
TL;DR
- fzf filters and selects lines; it is not a content search engine on its own.
- Without piped input, it walks files under the current directory to build candidates.
- Learn plain selection (
Enter/Esc) before adding shell key bindings or custom completion triggers. - Optional shell integration (CTRL-T / CTRL-R / ALT-C and fuzzy completion) is separate from the core finder.
- Checked release on this site’s software note: 0.74.5 (see the fzf software page). Boloop has not installed or run fzf for this article.
What fzf does
Official docs describe fzf as a general-purpose command-line fuzzy finder. Typical flow:
- Feed candidate lines on standard input, or let the default file walker build a list when stdin is a TTY.
- Type to narrow the list with fuzzy (or exact) matching.
- Press Enter to print the selection to stdout, or Esc / Ctrl-C / Ctrl-G to cancel.
Example pattern from the README: find * -type f | fzf > selected. Opening an editor with a selection is commonly shown as vim $(fzf) (the README also notes more robust patterns such as fzf --print0 | xargs -0 -o vim and become(...)).
What fzf is not
- Not a full-text code search. Filtering paths is not the same as searching file contents. The official advanced examples show combining tools (for example ripgrep + fzf) when you want interactive content search—that is a composed workflow, not the default finder.
- Not automatic shell shortcuts. Key bindings and fuzzy completion require shell integration (
fzf --bash/fzf --zsh/fzf --fish, or older shell scripts). Installing the binary alone does not guarantee CTRL-R history search. - Not a Git UI. Staging hunks and reviewing diffs belong to tools such as Lazygit; fzf only helps you pick lines or paths you feed it.
First success: select from a small list
Before binding keys, prove selection on a list you understand:
printf '%s\n' alpha beta gamma | fzfType a fragment, move with Ctrl-J / Ctrl-K (or arrows), press Enter, and confirm the printed line. Cancel with Esc. Only after that, install or enable shell integration if you want CTRL-T / CTRL-R / ALT-C.
For install options (Homebrew, packages, binary releases) and version checks, use the project README and this site’s fzf software note.
When shell integration helps
After the binary works, shell integration adds documented bindings (bash / zsh / fish / Nushell):
| Binding | Role (per README) |
| --- | --- |
| CTRL-T | Paste selected files/directories onto the command line |
| CTRL-R | Paste a selected history command |
| ALT-C | cd into a selected directory |
Fuzzy completion (default trigger ** on bash/zsh) is also optional and shell-specific. Prefer documented defaults before inventing custom completion triggers.
FAQ
Does fzf search inside my files?
No—not by default. It selects from a list of lines. Searching file contents requires another program (for example ripgrep) whose results you may then pipe into fzf.
Do I need shell integration on day one?
No. Core usage is stdin → interactive filter → stdout. Add shell integration when you want the documented key bindings or fuzzy completion.
Is fzf the same as Lazygit or Yazi?
No. fzf picks lines. Yazi is a terminal file manager; Lazygit is a terminal Git UI. See the combined loop in Terminal workflow: fzf, Lazygit, Yazi.
Which version does this page refer to?
This article follows the official README behavior. The software page on Boloop last checked release 0.74.5. Re-check fzf --version and the releases page on your machine.
Sources
- fzf README — Junegunn Choi and contributors (installation, usage, shell integration).
- fzf releases — version tags.
- Related on Boloop: fzf software, terminal workflow.
Limits
Boloop has not installed or executed fzf for this write-up. Claims above are taken from the public official documentation and this site’s existing attributed software note. Custom shells, older package builds, and third-party wrappers can differ—verify on your system.