fzf
Interactive command-line fuzzy finder for filtering lists like files, history and git branches.
Loved for fuzzy Ctrl-R shell history search123 and as a general picker you can pipe anything into, from git branches to files4567, with plenty of plugins and tools built on top of it.8910 Complaints are scattered rather than common: one commenter says its history search doesn't always sync across open tabs11, and another wanted a sturdier way to embed it in their own apps than calling it through a shell.12
Why people recommend it
History search · 3
Commenters bind it to Ctrl-R to interactively fuzzy-filter shell history.
“I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r.”
“It's easy to setup an interface that makes search a bit easier still, including showing you a list as you interactively filter history, with fzf”
Show 1 more
“before that history | fzf. Which is bound to ctrl+r for me.”
Pipeable picker · 3
Any list can be piped into it, which makes it easy to add interactive selection to scripts.
“Now I rely on standard input and standard output, and `fzf` for all the rest.”
“Polished interactivity is easy to build by just embedding a copy of `fzf`.”
Show 1 more
“query your notes, pick the hits with fzf, bulk-tag them”
Git workflows · 3
Popular for fuzzy-selecting git branches, tags and commits.
“The best upgrade to these kinds of git branch scripts is piping them to fzf.”
“I love this little fzf bash function that I wrote a few years ago”
Show 1 more
“for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.”
Extensibility · 3
Called just a picker but with many extensions, and other tools build on it.
“FZF is just a picker, but it has a ton of extensions.”
“But I still use fzf to find files.”
Show 1 more
File finding · 2
Used to find files from the shell and from Vim.
“But I still use fzf to find files.”
“Hell, I use fzf most times (`:GFiles`).”
TUI toolkit · 3
A staple alongside tools like yazi, zellij and neovim in terminal setups.
“particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc”
Show 1 more
“just fake the layout using zellij, fzf and a little scripting”
Caveats and dissent
Tab history sync · 1
One user switched history search to atuin because fzf didn't always pick up commands from other open tabs.
“But I still use fzf to find files.”
Embedding in apps · 1
One developer wanted a more robust way to use it inside their own applications than calling it as a shell command.
Not default · 2
Its key bindings need to be installed and configured; they are not there by default.
“before that history | fzf. Which is bound to ctrl+r for me.”
“fzf gets installed with all the proper key bindings”
Limited context · 1
One tool author built a history wrapper because plain fzf shows less context.
Vim compatibility · 1
One user's fzf setup needed a fix after switching to vim-classic.
Often compared with
Who recommends it in their own words
Threads where it came up
- You probably don't need Oh My Zsh 3 mentions
- Faster command recall with substring search 2 mentions
- Small programming tricks 2 mentions
- Sort branches by last commit date 2 mentions
- Ask HN: What is your opinion on TUI applications 2 mentions
- Show HN: Toast, a by default in-terminal IDE 1 mention
Data: fzf.json. Quotes are verbatim; the verdict and theme labels are written by a model from these comments, and every clause links to its sources.
All comments 23
“It's easy to setup an interface that makes search a bit easier still, including showing you a list as you interactively filter history, with fzf”
“I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r.”
“fzf gets installed with all the proper key bindings”
“It uses fzf underneath”
“Hell, I use fzf most times (`:GFiles`).”
“The best upgrade to these kinds of git branch scripts is piping them to fzf.”
“I love this little fzf bash function that I wrote a few years ago”
“just fake the layout using zellij, fzf and a little scripting”
“fzf left and right for a bunch of utils”
“particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc”
“before that history | fzf. Which is bound to ctrl+r for me.”
“FZF is just a picker, but it has a ton of extensions.”
“Now I rely on standard input and standard output, and `fzf` for all the rest.”
“fzf needed a fix”
“query your notes, pick the hits with fzf, bulk-tag them”
“for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.”
“Most recently I pointed it at fzf and was able to pull the insensitive SIMD matching it uses”
“using vifm with some zoxide/fzf extra commands”
“I love fzf”
“plugins=(direnv fzf)”
“Also another plugin to show zsh's tab complete in fzf instead of zsh's window.”
“But I still use fzf to find files.”
“Polished interactivity is easy to build by just embedding a copy of `fzf`.”