{"slug": "fzf", "name": "fzf", "category": "terminal", "category_name": "Terminal and shell", "description": "Interactive command-line fuzzy finder for filtering lists like files, history and git branches.", "recommenders": 16, "commenters": 23, "warners": 0, "score": 16.665, "rising": 6.71, "first": "2025-12-13", "latest": "2026-10-19", "why": "Loved for fuzzy Ctrl-R shell history search and as a general picker you can pipe anything into, from git branches to files, with plenty of plugins and tools built on top of it.", "why_is_quote": false, "has_verdict": true, "sentiment": {"recommend": 16, "neutral": 7, "compare": 0, "warn": 0}, "spark": [0, 1, 2, 0, 1, 1, 0, 2, 0, 5, 2, 2], "listed": true, "loved": ["History search", "Pipeable picker"], "caveat": "Tab history sync", "short_quote": "for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.", "icon": true, "domain": null, "github_repo": "github.com/junegunn/fzf", "official_url": "https://github.com/junegunn/fzf", "pricing": "open source", "aliases": ["fzf"], "verdict": [{"text": "Loved for fuzzy Ctrl-R shell history search", "cites": [{"id": 802390496, "item_id": 50149406, "url": "https://news.ycombinator.com/item?id=50149406", "by": "avidiax", "date": "2026-10-19", "stance": "recommend", "quote": "I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r.", "excerpt": "This is useful on non-customized machines, but I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r. https://github.com/junegunn/fzf", "context": "", "use_case": "fuzzy shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 802553136, "item_id": 50159571, "url": "https://news.ycombinator.com/item?id=50159571", "by": "mcint", "date": "2026-10-19", "stance": "recommend", "quote": "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", "excerpt": "Sweet! Well-expressed, and well-explored. 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, [gh-fzf]. Examples of what users use most frequently, the key-bindings.{bash,zsh} has history key binds [arch-fzf]. The developer, junegunn, writes about it more generally, and all the other fun ways you can apply it [dev-fzf]. For ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 788349857, "item_id": 49271866, "url": "https://news.ycombinator.com/item?id=49271866", "by": "Fnoord", "date": "2026-08-12", "stance": "neutral", "quote": "before that history | fzf. Which is bound to ctrl+r for me.", "excerpt": "Those people are fine just using arrows and backspace, as it isn't worth it to min-max this. I don't want to learn/use Emacs, this doesn't even work on macOS, and Ctrl+A interferes with my tmux keybind. This is why vi keybinds are nice in shells, but... defaults matter. I haven't decided yet if I want to use NFS to malware my configs, or git. I think git is more flexible, but I don't want my configs in a public git. ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "A shell exclamation mark is not for yelling. Be lazy"}]}, {"text": " and as a general picker you can pipe anything into, from git branches to files", "cites": [{"id": 792070656, "item_id": 49504416, "url": "https://news.ycombinator.com/item?id=49504416", "by": "jbranchaud", "date": "2026-08-31", "stance": "recommend", "quote": "The best upgrade to these kinds of git branch scripts is piping them to fzf.", "excerpt": "The best upgrade to these kinds of git branch scripts is piping them to fzf. I\u2019ve been using this fbr one from the fzf repo. https://github.com/jbranchaud/dotfiles/blob/main/zshrc.local#L38", "context": "", "use_case": "fuzzy selecting git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 792043776, "item_id": 49502736, "url": "https://news.ycombinator.com/item?id=49502736", "by": "tomtom1337", "date": "2026-08-30", "stance": "recommend", "quote": "I love this little fzf bash function that I wrote a few years ago", "excerpt": "I love this little fzf bash function that I wrote a few years ago: https://gist.github.com/thomasaarholt/141df779f3f16b641701b4782431f7c3 It opens a fuzzy finder window showing the branches you have in the repo, sorted by recency. Also shows the latest committer and the date. Hit enter on the one you want to swap to it.", "context": "", "use_case": "switching git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 764116656, "item_id": 47757291, "url": "https://news.ycombinator.com/item?id=47757291", "by": "mcevoypeter", "date": "2026-04-13", "stance": "recommend", "quote": "for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.", "excerpt": "1. https://github.com/junegunn/fzf for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc. 2. https://github.com/casey/just for more structured scripting.", "context": "", "use_case": "fuzzy search in shell", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}, {"id": 778088736, "item_id": 48630546, "url": "https://news.ycombinator.com/item?id=48630546", "by": "lordkrandel", "date": "2026-06-22", "stance": "recommend", "quote": "Now I rely on standard input and standard output, and `fzf` for all the rest.", "excerpt": "I was a fan, until I found in developing them, the same friction of a frontend developer. All of a sudden, I realized that the command line is already the TUI I want. Commands can be piped, while graphic interaction cannot. Now I rely on standard input and standard output, and `fzf` for all the rest.", "context": "", "use_case": "command line selection", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}]}, {"text": ", with plenty of plugins and tools built on top of it.", "cites": [{"id": 778120881, "item_id": 48632555, "url": "https://news.ycombinator.com/item?id=48632555", "by": "laladrik", "date": "2026-06-22", "stance": "recommend", "quote": "FZF is just a picker, but it has a ton of extensions.", "excerpt": "I'm surprised that Vim is not on the first place here. Great TUI application. However, the about the TUI applications which I use is extensibility. For example, FZF is just a picker, but it has a ton of extensions. Another TUI I like is the interactive mode of Khal (calendar). However, apart from TUI it allows to be used through CLI which allows you to make your scripts on top of it.", "context": "", "use_case": "fuzzy picker", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}, {"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 795670913, "item_id": 49729432, "url": "https://news.ycombinator.com/item?id=49729432", "by": "overflowy", "date": "2026-09-16", "stance": "neutral", "quote": "It uses fzf underneath", "excerpt": "If you want to level up your Zsh history experience, I built zhist[1] specifically for that. It uses fzf underneath, but provides considerably more context than simply using fzf. There's a demo video in the README. [1] https://github.com/overflowy/zhist", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Small programming tricks"}]}, {"text": " Complaints are scattered rather than common: one commenter says its history search doesn't always sync across open tabs", "cites": [{"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}]}, {"text": ", and another wanted a sturdier way to embed it in their own apps than calling it through a shell.", "cites": [{"id": 756625873, "item_id": 47289117, "url": "https://news.ycombinator.com/item?id=47289117", "by": "squirreljetpack", "date": "2026-03-07", "stance": "recommend", "quote": "I love fzf", "excerpt": "Hi all, been working on this for a while. I love fzf, but I wanted to a more robust way to use it in my own applications than calling it a shell, and Skim wasn't quite what I was looking for. I'd say it's close to feature-parity with fzf, in addition to being toml-configurable, and supporting a unique command-line syntax (which in my opinion is quite nice -- especially when binding shell-scripts where escaping specia", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Matchmaker \u2013 a fzf program and library in Rust"}]}], "praise": [{"label": "History search", "summary": "Commenters bind it to Ctrl-R to interactively fuzzy-filter shell history.", "quotes": [{"id": 802390496, "item_id": 50149406, "url": "https://news.ycombinator.com/item?id=50149406", "by": "avidiax", "date": "2026-10-19", "stance": "recommend", "quote": "I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r.", "excerpt": "This is useful on non-customized machines, but I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r. https://github.com/junegunn/fzf", "context": "", "use_case": "fuzzy shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 802553136, "item_id": 50159571, "url": "https://news.ycombinator.com/item?id=50159571", "by": "mcint", "date": "2026-10-19", "stance": "recommend", "quote": "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", "excerpt": "Sweet! Well-expressed, and well-explored. 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, [gh-fzf]. Examples of what users use most frequently, the key-bindings.{bash,zsh} has history key binds [arch-fzf]. The developer, junegunn, writes about it more generally, and all the other fun ways you can apply it [dev-fzf]. For ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 788349857, "item_id": 49271866, "url": "https://news.ycombinator.com/item?id=49271866", "by": "Fnoord", "date": "2026-08-12", "stance": "neutral", "quote": "before that history | fzf. Which is bound to ctrl+r for me.", "excerpt": "Those people are fine just using arrows and backspace, as it isn't worth it to min-max this. I don't want to learn/use Emacs, this doesn't even work on macOS, and Ctrl+A interferes with my tmux keybind. This is why vi keybinds are nice in shells, but... defaults matter. I haven't decided yet if I want to use NFS to malware my configs, or git. I think git is more flexible, but I don't want my configs in a public git. ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "A shell exclamation mark is not for yelling. Be lazy"}]}, {"label": "Pipeable picker", "summary": "Any list can be piped into it, which makes it easy to add interactive selection to scripts.", "quotes": [{"id": 778088736, "item_id": 48630546, "url": "https://news.ycombinator.com/item?id=48630546", "by": "lordkrandel", "date": "2026-06-22", "stance": "recommend", "quote": "Now I rely on standard input and standard output, and `fzf` for all the rest.", "excerpt": "I was a fan, until I found in developing them, the same friction of a frontend developer. All of a sudden, I realized that the command line is already the TUI I want. Commands can be piped, while graphic interaction cannot. Now I rely on standard input and standard output, and `fzf` for all the rest.", "context": "", "use_case": "command line selection", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}, {"id": 740140963, "item_id": 46258810, "url": "https://news.ycombinator.com/item?id=46258810", "by": "pxc", "date": "2025-12-13", "stance": "recommend", "quote": "Polished interactivity is easy to build by just embedding a copy of `fzf`.", "excerpt": "> If a script is simple - I use posix sh + awk, sed, etc. > But if a script I write needs to use arrays, sets, hashtable or processes many files One option that I sometimes use at work (in addition to writing some Python CLIs) that is a pretty nice next step on this spectrum is Bash-with-all-the-fixins'. I use a Nix-based dependency resolver for shell scripts called resholve\u00b9 to parse scripts so that it can identify ", "context": "", "use_case": "interactive shell scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 765662305, "item_id": 47853894, "url": "https://news.ycombinator.com/item?id=47853894", "by": "buyukdev", "date": "2026-04-21", "stance": "neutral", "quote": "query your notes, pick the hits with fzf, bulk-tag them", "excerpt": "Author here. Quick taste - query your notes, pick the hits with fzf, bulk-tag them: fmql query ./vault 'type = \"task\" AND status = \"open\" AND priority > 2' \\ | fzf -m --preview 'head -40 {}' \\ | fmql append tags=triaged Or follow references across files and get back deps graph you can render: fmql subgraph ./notes 'status = \"active\"' --follow blocked_by --format cytoscape Origins: I run my own projects on workspaces ", "context": "", "use_case": "selecting query results", "switched_from": "", "story": "Show HN: FMQL \u2013 graph query and bulk-edit CLI for Markdown and YAML frontmatter"}]}, {"label": "Git workflows", "summary": "Popular for fuzzy-selecting git branches, tags and commits.", "quotes": [{"id": 792070656, "item_id": 49504416, "url": "https://news.ycombinator.com/item?id=49504416", "by": "jbranchaud", "date": "2026-08-31", "stance": "recommend", "quote": "The best upgrade to these kinds of git branch scripts is piping them to fzf.", "excerpt": "The best upgrade to these kinds of git branch scripts is piping them to fzf. I\u2019ve been using this fbr one from the fzf repo. https://github.com/jbranchaud/dotfiles/blob/main/zshrc.local#L38", "context": "", "use_case": "fuzzy selecting git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 792043776, "item_id": 49502736, "url": "https://news.ycombinator.com/item?id=49502736", "by": "tomtom1337", "date": "2026-08-30", "stance": "recommend", "quote": "I love this little fzf bash function that I wrote a few years ago", "excerpt": "I love this little fzf bash function that I wrote a few years ago: https://gist.github.com/thomasaarholt/141df779f3f16b641701b4782431f7c3 It opens a fuzzy finder window showing the branches you have in the repo, sorted by recency. Also shows the latest committer and the date. Hit enter on the one you want to swap to it.", "context": "", "use_case": "switching git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 764116656, "item_id": 47757291, "url": "https://news.ycombinator.com/item?id=47757291", "by": "mcevoypeter", "date": "2026-04-13", "stance": "recommend", "quote": "for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.", "excerpt": "1. https://github.com/junegunn/fzf for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc. 2. https://github.com/casey/just for more structured scripting.", "context": "", "use_case": "fuzzy search in shell", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}]}, {"label": "Extensibility", "summary": "Called just a picker but with many extensions, and other tools build on it.", "quotes": [{"id": 778120881, "item_id": 48632555, "url": "https://news.ycombinator.com/item?id=48632555", "by": "laladrik", "date": "2026-06-22", "stance": "recommend", "quote": "FZF is just a picker, but it has a ton of extensions.", "excerpt": "I'm surprised that Vim is not on the first place here. Great TUI application. However, the about the TUI applications which I use is extensibility. For example, FZF is just a picker, but it has a ton of extensions. Another TUI I like is the interactive mode of Khal (calendar). However, apart from TUI it allows to be used through CLI which allows you to make your scripts on top of it.", "context": "", "use_case": "fuzzy picker", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}, {"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 795670913, "item_id": 49729432, "url": "https://news.ycombinator.com/item?id=49729432", "by": "overflowy", "date": "2026-09-16", "stance": "neutral", "quote": "It uses fzf underneath", "excerpt": "If you want to level up your Zsh history experience, I built zhist[1] specifically for that. It uses fzf underneath, but provides considerably more context than simply using fzf. There's a demo video in the README. [1] https://github.com/overflowy/zhist", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Small programming tricks"}]}, {"label": "File finding", "summary": "Used to find files from the shell and from Vim.", "quotes": [{"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 794623745, "item_id": 49663984, "url": "https://news.ycombinator.com/item?id=49663984", "by": "godelski", "date": "2026-09-11", "stance": "recommend", "quote": "Hell, I use fzf most times (`:GFiles`).", "excerpt": "He said the same about vim, but did everyone forget about netrw? Here, go into vim and type `:Ex`. You can also have mouse support. (Netrw can also do trees if you don't like the format, go look at `g:netrw_liststyle`) My friend on eMacs say something similar, but you don't really need as many plugins as people typically use. There's lots of native ways to do things. It's totally fine to prefer NerdTree over the nati", "context": "Vim user", "use_case": "fuzzy file finding", "switched_from": "", "story": "Show HN: Toast, a by default in-terminal IDE"}]}, {"label": "TUI toolkit", "summary": "A staple alongside tools like yazi, zellij and neovim in terminal setups.", "quotes": [{"id": 790415972, "item_id": 49400998, "url": "https://news.ycombinator.com/item?id=49400998", "by": "folkrav", "date": "2026-08-22", "stance": "recommend", "quote": "fzf left and right for a bunch of utils", "excerpt": "Not OP but, I regularly use : - yazi as a file explorer - lazygit for git - tmux/zellij as multiplexers - fzf left and right for a bunch of utils (terminal history, switching between projects in zellij/tmux when working in multi-project workspaces, etc) - neovim as a text editor - glow for markdown reading - currently on pi for my home harness, CC at work I'm probably missing a few but those are the ones I use more o", "context": "", "use_case": "history search, project switching", "switched_from": "", "story": "Stop Making TUIs"}, {"id": 790204259, "item_id": 49387766, "url": "https://news.ycombinator.com/item?id=49387766", "by": "Alien1Being", "date": "2026-08-21", "stance": "recommend", "quote": "particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc", "excerpt": "Linux is so very predictably stable from a desktop user perspective . It is an absolute pleasure to use , particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc Been using it since the early nineties . At work I use Windows Server 2025 as my desktop ( the alternative would be the dreadful AI infested Windows 11). While Windows Server 2025 is not dreadful , the Linux experience is so much ni", "context": "", "use_case": "", "switched_from": "", "story": "Linux 7.2 Released"}, {"id": 790443905, "item_id": 49402744, "url": "https://news.ycombinator.com/item?id=49402744", "by": "kruskakli", "date": "2026-08-22", "stance": "recommend", "quote": "just fake the layout using zellij, fzf and a little scripting", "excerpt": "or just fake the layout using zellij, fzf and a little scripting... hehe https://github.com/etnt/my-zellij-config", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Show HN: terminal-code \u2013 VS Code inside the terminal"}]}], "caveats": [{"label": "Tab history sync", "summary": "One user switched history search to atuin because fzf didn't always pick up commands from other open tabs.", "quotes": [{"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}]}, {"label": "Embedding in apps", "summary": "One developer wanted a more robust way to use it inside their own applications than calling it as a shell command.", "quotes": [{"id": 756625873, "item_id": 47289117, "url": "https://news.ycombinator.com/item?id=47289117", "by": "squirreljetpack", "date": "2026-03-07", "stance": "recommend", "quote": "I love fzf", "excerpt": "Hi all, been working on this for a while. I love fzf, but I wanted to a more robust way to use it in my own applications than calling it a shell, and Skim wasn't quite what I was looking for. I'd say it's close to feature-parity with fzf, in addition to being toml-configurable, and supporting a unique command-line syntax (which in my opinion is quite nice -- especially when binding shell-scripts where escaping specia", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Matchmaker \u2013 a fzf program and library in Rust"}]}, {"label": "Not default", "summary": "Its key bindings need to be installed and configured; they are not there by default.", "quotes": [{"id": 788349857, "item_id": 49271866, "url": "https://news.ycombinator.com/item?id=49271866", "by": "Fnoord", "date": "2026-08-12", "stance": "neutral", "quote": "before that history | fzf. Which is bound to ctrl+r for me.", "excerpt": "Those people are fine just using arrows and backspace, as it isn't worth it to min-max this. I don't want to learn/use Emacs, this doesn't even work on macOS, and Ctrl+A interferes with my tmux keybind. This is why vi keybinds are nice in shells, but... defaults matter. I haven't decided yet if I want to use NFS to malware my configs, or git. I think git is more flexible, but I don't want my configs in a public git. ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "A shell exclamation mark is not for yelling. Be lazy"}, {"id": 795807009, "item_id": 49737938, "url": "https://news.ycombinator.com/item?id=49737938", "by": "hiAndrewQuinn", "date": "2026-09-17", "stance": "recommend", "quote": "fzf gets installed with all the proper key bindings", "excerpt": "A lot of these tricks come down to knowing there is a better alternative program somewhere out there in the universe, and then installing it. I happen to keep a shell script handy for these situations, which automatically installs most of the options listed here: https://github.com/hiAndrewQuinn/shell-bling-ubuntu More readable presentation: https://hiandrewquinn.github.io/shell-bling-ubuntu/ Among other things, fzf ", "context": "", "use_case": "fuzzy finding in shell", "switched_from": "", "story": "Small programming tricks"}]}, {"label": "Limited context", "summary": "One tool author built a history wrapper because plain fzf shows less context.", "quotes": [{"id": 795670913, "item_id": 49729432, "url": "https://news.ycombinator.com/item?id=49729432", "by": "overflowy", "date": "2026-09-16", "stance": "neutral", "quote": "It uses fzf underneath", "excerpt": "If you want to level up your Zsh history experience, I built zhist[1] specifically for that. It uses fzf underneath, but provides considerably more context than simply using fzf. There's a demo video in the README. [1] https://github.com/overflowy/zhist", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Small programming tricks"}]}, {"label": "Vim compatibility", "summary": "One user's fzf setup needed a fix after switching to vim-classic.", "quotes": [{"id": 769897537, "item_id": 48118596, "url": "https://news.ycombinator.com/item?id=48118596", "by": "keyle", "date": "2026-05-12", "stance": "neutral", "quote": "fzf needed a fix", "excerpt": "I didn't know about vim-classic, I've switched to it now. I can't really notice much of a difference except themes are missing... and fzf needed a fix.", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "The vi family"}]}], "who": [{"by": "godelski", "context": "Vim user", "url": "https://news.ycombinator.com/item?id=49663984", "date": "2026-09-11"}], "tags": ["for shell users", "for zsh users", "for git workflows", "for shell scripting", "for Vim users"], "use_cases": ["fuzzy finding", "shell history search", "fuzzy shell history search", "fuzzy finding in shell", "fuzzy file finding", "fuzzy selecting git branches"], "compared": [{"slug": "atuin", "name": "Atuin", "co": 3, "switched_from": 0, "switched_to": 1}, {"slug": "ripgrep", "name": "ripgrep", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "yazi", "name": "yazi", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "oh-my-zsh", "name": "Oh My Zsh", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "claude-code", "name": "Claude Code", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "zellij", "name": "Zellij", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "vim", "name": "Vim", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46562790", "title": "You probably don't need Oh My Zsh", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=50102932", "title": "Faster command recall with substring search", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49729000", "title": "Small programming tricks", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49435285", "title": "Sort branches by last commit date", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48628274", "title": "Ask HN: What is your opinion on TUI applications", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49662496", "title": "Show HN: Toast, a by default in-terminal IDE", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 1}, "2026-01": {"recommend": 2, "neutral": 1}, "2026-02": {}, "2026-03": {"recommend": 1}, "2026-04": {"neutral": 3, "recommend": 1}, "2026-05": {"neutral": 1}, "2026-06": {"recommend": 2}, "2026-07": {}, "2026-08": {"neutral": 1, "recommend": 5}, "2026-09": {"recommend": 2, "neutral": 1}, "2026-10": {"recommend": 2}}, "quotes": [{"id": 802553136, "item_id": 50159571, "url": "https://news.ycombinator.com/item?id=50159571", "by": "mcint", "date": "2026-10-19", "stance": "recommend", "quote": "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", "excerpt": "Sweet! Well-expressed, and well-explored. 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, [gh-fzf]. Examples of what users use most frequently, the key-bindings.{bash,zsh} has history key binds [arch-fzf]. The developer, junegunn, writes about it more generally, and all the other fun ways you can apply it [dev-fzf]. For ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 802390496, "item_id": 50149406, "url": "https://news.ycombinator.com/item?id=50149406", "by": "avidiax", "date": "2026-10-19", "stance": "recommend", "quote": "I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r.", "excerpt": "This is useful on non-customized machines, but I always install fzf now, including the shell integrations like fuzzy history search bound to ctrl-r. https://github.com/junegunn/fzf", "context": "", "use_case": "fuzzy shell history search", "switched_from": "", "story": "Faster command recall with substring search"}, {"id": 795807009, "item_id": 49737938, "url": "https://news.ycombinator.com/item?id=49737938", "by": "hiAndrewQuinn", "date": "2026-09-17", "stance": "recommend", "quote": "fzf gets installed with all the proper key bindings", "excerpt": "A lot of these tricks come down to knowing there is a better alternative program somewhere out there in the universe, and then installing it. I happen to keep a shell script handy for these situations, which automatically installs most of the options listed here: https://github.com/hiAndrewQuinn/shell-bling-ubuntu More readable presentation: https://hiandrewquinn.github.io/shell-bling-ubuntu/ Among other things, fzf ", "context": "", "use_case": "fuzzy finding in shell", "switched_from": "", "story": "Small programming tricks"}, {"id": 795670913, "item_id": 49729432, "url": "https://news.ycombinator.com/item?id=49729432", "by": "overflowy", "date": "2026-09-16", "stance": "neutral", "quote": "It uses fzf underneath", "excerpt": "If you want to level up your Zsh history experience, I built zhist[1] specifically for that. It uses fzf underneath, but provides considerably more context than simply using fzf. There's a demo video in the README. [1] https://github.com/overflowy/zhist", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Small programming tricks"}, {"id": 794623745, "item_id": 49663984, "url": "https://news.ycombinator.com/item?id=49663984", "by": "godelski", "date": "2026-09-11", "stance": "recommend", "quote": "Hell, I use fzf most times (`:GFiles`).", "excerpt": "He said the same about vim, but did everyone forget about netrw? Here, go into vim and type `:Ex`. You can also have mouse support. (Netrw can also do trees if you don't like the format, go look at `g:netrw_liststyle`) My friend on eMacs say something similar, but you don't really need as many plugins as people typically use. There's lots of native ways to do things. It's totally fine to prefer NerdTree over the nati", "context": "Vim user", "use_case": "fuzzy file finding", "switched_from": "", "story": "Show HN: Toast, a by default in-terminal IDE"}, {"id": 792070656, "item_id": 49504416, "url": "https://news.ycombinator.com/item?id=49504416", "by": "jbranchaud", "date": "2026-08-31", "stance": "recommend", "quote": "The best upgrade to these kinds of git branch scripts is piping them to fzf.", "excerpt": "The best upgrade to these kinds of git branch scripts is piping them to fzf. I\u2019ve been using this fbr one from the fzf repo. https://github.com/jbranchaud/dotfiles/blob/main/zshrc.local#L38", "context": "", "use_case": "fuzzy selecting git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 792043776, "item_id": 49502736, "url": "https://news.ycombinator.com/item?id=49502736", "by": "tomtom1337", "date": "2026-08-30", "stance": "recommend", "quote": "I love this little fzf bash function that I wrote a few years ago", "excerpt": "I love this little fzf bash function that I wrote a few years ago: https://gist.github.com/thomasaarholt/141df779f3f16b641701b4782431f7c3 It opens a fuzzy finder window showing the branches you have in the repo, sorted by recency. Also shows the latest committer and the date. Hit enter on the one you want to swap to it.", "context": "", "use_case": "switching git branches", "switched_from": "", "story": "Sort branches by last commit date"}, {"id": 790443905, "item_id": 49402744, "url": "https://news.ycombinator.com/item?id=49402744", "by": "kruskakli", "date": "2026-08-22", "stance": "recommend", "quote": "just fake the layout using zellij, fzf and a little scripting", "excerpt": "or just fake the layout using zellij, fzf and a little scripting... hehe https://github.com/etnt/my-zellij-config", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Show HN: terminal-code \u2013 VS Code inside the terminal"}, {"id": 790415972, "item_id": 49400998, "url": "https://news.ycombinator.com/item?id=49400998", "by": "folkrav", "date": "2026-08-22", "stance": "recommend", "quote": "fzf left and right for a bunch of utils", "excerpt": "Not OP but, I regularly use : - yazi as a file explorer - lazygit for git - tmux/zellij as multiplexers - fzf left and right for a bunch of utils (terminal history, switching between projects in zellij/tmux when working in multi-project workspaces, etc) - neovim as a text editor - glow for markdown reading - currently on pi for my home harness, CC at work I'm probably missing a few but those are the ones I use more o", "context": "", "use_case": "history search, project switching", "switched_from": "", "story": "Stop Making TUIs"}, {"id": 790204259, "item_id": 49387766, "url": "https://news.ycombinator.com/item?id=49387766", "by": "Alien1Being", "date": "2026-08-21", "stance": "recommend", "quote": "particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc", "excerpt": "Linux is so very predictably stable from a desktop user perspective . It is an absolute pleasure to use , particularly when combined with TUI applications like yazi, lsd, fzf , neovim etc Been using it since the early nineties . At work I use Windows Server 2025 as my desktop ( the alternative would be the dreadful AI infested Windows 11). While Windows Server 2025 is not dreadful , the Linux experience is so much ni", "context": "", "use_case": "", "switched_from": "", "story": "Linux 7.2 Released"}, {"id": 788349857, "item_id": 49271866, "url": "https://news.ycombinator.com/item?id=49271866", "by": "Fnoord", "date": "2026-08-12", "stance": "neutral", "quote": "before that history | fzf. Which is bound to ctrl+r for me.", "excerpt": "Those people are fine just using arrows and backspace, as it isn't worth it to min-max this. I don't want to learn/use Emacs, this doesn't even work on macOS, and Ctrl+A interferes with my tmux keybind. This is why vi keybinds are nice in shells, but... defaults matter. I haven't decided yet if I want to use NFS to malware my configs, or git. I think git is more flexible, but I don't want my configs in a public git. ", "context": "", "use_case": "shell history search", "switched_from": "", "story": "A shell exclamation mark is not for yelling. Be lazy"}, {"id": 778120881, "item_id": 48632555, "url": "https://news.ycombinator.com/item?id=48632555", "by": "laladrik", "date": "2026-06-22", "stance": "recommend", "quote": "FZF is just a picker, but it has a ton of extensions.", "excerpt": "I'm surprised that Vim is not on the first place here. Great TUI application. However, the about the TUI applications which I use is extensibility. For example, FZF is just a picker, but it has a ton of extensions. Another TUI I like is the interactive mode of Khal (calendar). However, apart from TUI it allows to be used through CLI which allows you to make your scripts on top of it.", "context": "", "use_case": "fuzzy picker", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}, {"id": 778088736, "item_id": 48630546, "url": "https://news.ycombinator.com/item?id=48630546", "by": "lordkrandel", "date": "2026-06-22", "stance": "recommend", "quote": "Now I rely on standard input and standard output, and `fzf` for all the rest.", "excerpt": "I was a fan, until I found in developing them, the same friction of a frontend developer. All of a sudden, I realized that the command line is already the TUI I want. Commands can be piped, while graphic interaction cannot. Now I rely on standard input and standard output, and `fzf` for all the rest.", "context": "", "use_case": "command line selection", "switched_from": "", "story": "Ask HN: What is your opinion on TUI applications"}, {"id": 769897537, "item_id": 48118596, "url": "https://news.ycombinator.com/item?id=48118596", "by": "keyle", "date": "2026-05-12", "stance": "neutral", "quote": "fzf needed a fix", "excerpt": "I didn't know about vim-classic, I've switched to it now. I can't really notice much of a difference except themes are missing... and fzf needed a fix.", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "The vi family"}, {"id": 765662305, "item_id": 47853894, "url": "https://news.ycombinator.com/item?id=47853894", "by": "buyukdev", "date": "2026-04-21", "stance": "neutral", "quote": "query your notes, pick the hits with fzf, bulk-tag them", "excerpt": "Author here. Quick taste - query your notes, pick the hits with fzf, bulk-tag them: fmql query ./vault 'type = \"task\" AND status = \"open\" AND priority > 2' \\ | fzf -m --preview 'head -40 {}' \\ | fmql append tags=triaged Or follow references across files and get back deps graph you can render: fmql subgraph ./notes 'status = \"active\"' --follow blocked_by --format cytoscape Origins: I run my own projects on workspaces ", "context": "", "use_case": "selecting query results", "switched_from": "", "story": "Show HN: FMQL \u2013 graph query and bulk-edit CLI for Markdown and YAML frontmatter"}, {"id": 764116656, "item_id": 47757291, "url": "https://news.ycombinator.com/item?id=47757291", "by": "mcevoypeter", "date": "2026-04-13", "stance": "recommend", "quote": "for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc.", "excerpt": "1. https://github.com/junegunn/fzf for fuzzy search. Great for easily searching and selecting git branches + tags + commits, commands from shell history, files, shell jobs, processes, etc. 2. https://github.com/casey/just for more structured scripting.", "context": "", "use_case": "fuzzy search in shell", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}, {"id": 763908449, "item_id": 47744278, "url": "https://news.ycombinator.com/item?id=47744278", "by": "boyter", "date": "2026-04-12", "stance": "neutral", "quote": "Most recently I pointed it at fzf and was able to pull the insensitive SIMD matching it uses", "excerpt": "I reimagined https://searchcode.com/ since I realised LLMs have issues when it comes to understanding code you want to integrate. It\u2019s useful for looking though any codebase, or multiple without having to clone it. I use it when I have candidate libraries to solve a problem, or I just want to find out how things work. Most recently I pointed it at fzf and was able to pull the insensitive SIMD matching it uses and spe", "context": "", "use_case": "studying its matching code", "switched_from": "", "story": "Ask HN: What Are You Working On? (April 2026)"}, {"id": 763832658, "item_id": 47739541, "url": "https://news.ycombinator.com/item?id=47739541", "by": "gala8y", "date": "2026-04-12", "stance": "neutral", "quote": "using vifm with some zoxide/fzf extra commands", "excerpt": "> With OpenCode, I can finally make my own terminal file manager. I borrowed the main design concepts from Midnight Commander and some behavior from NVim-Tree file explorer. I recently switched to almost exclusively using vifm with some zoxide/fzf extra commands for even more keyboard-centric usage and it really feels like it is now 'my own terminal file manager'.", "context": "", "use_case": "keyboard-centric navigation", "switched_from": "", "story": "Midnight Captain \u2013 A midnight commander inspired file manager"}, {"id": 756625873, "item_id": 47289117, "url": "https://news.ycombinator.com/item?id=47289117", "by": "squirreljetpack", "date": "2026-03-07", "stance": "recommend", "quote": "I love fzf", "excerpt": "Hi all, been working on this for a while. I love fzf, but I wanted to a more robust way to use it in my own applications than calling it a shell, and Skim wasn't quite what I was looking for. I'd say it's close to feature-parity with fzf, in addition to being toml-configurable, and supporting a unique command-line syntax (which in my opinion is quite nice -- especially when binding shell-scripts where escaping specia", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "Matchmaker \u2013 a fzf program and library in Rust"}, {"id": 745132724, "item_id": 46570795, "url": "https://news.ycombinator.com/item?id=46570795", "by": "asadjb", "date": "2026-01-10", "stance": "neutral", "quote": "plugins=(direnv fzf)", "excerpt": "I've been an oh-my-zsh user for many years now, being very happy with the very small set of features I use from it. Previously I could never think of trying to figure out how to replicate the features I need without the other features from oh-my-zsh, which does make the shell noticeably slower. Just now, after reading this article, I used Claude code and have removed the OMZ config within 5 minutes. Here's my prompt ", "context": "", "use_case": "fuzzy finding", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 745037938, "item_id": 46564871, "url": "https://news.ycombinator.com/item?id=46564871", "by": "nickjj", "date": "2026-01-10", "stance": "recommend", "quote": "Also another plugin to show zsh's tab complete in fzf instead of zsh's window.", "excerpt": "When I switched to zsh 5 years ago, I went with a stock set up too. There's quite a few things the OP's post didn't mention about shell history that I think are really important: setopt HIST_IGNORE_ALL_DUPS # Never add duplicate entries. setopt HIST_IGNORE_SPACE # Ignore commands that start with a space. setopt HIST_REDUCE_BLANKS # Remove unnecessary blank lines. It's possible to roll your own prompt that does helpfu", "context": "", "use_case": "zsh tab completion", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 745013905, "item_id": 46563369, "url": "https://news.ycombinator.com/item?id=46563369", "by": "Zizizizz", "date": "2026-01-09", "stance": "recommend", "quote": "But I still use fzf to find files.", "excerpt": "I use atuin for the shell history as it seems to know when I've run a command in one tab/split while another is open where fzf doesn't seem to sync it all the time. But I still use fzf to find files. (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's much faster, and use https://github.com/Aloxaf/fzf-tab for tab completions in the terminal to become fuzzy, very very useful)", "context": "", "use_case": "finding files", "switched_from": "", "story": "You probably don't need Oh My Zsh"}, {"id": 740140963, "item_id": 46258810, "url": "https://news.ycombinator.com/item?id=46258810", "by": "pxc", "date": "2025-12-13", "stance": "recommend", "quote": "Polished interactivity is easy to build by just embedding a copy of `fzf`.", "excerpt": "> If a script is simple - I use posix sh + awk, sed, etc. > But if a script I write needs to use arrays, sets, hashtable or processes many files One option that I sometimes use at work (in addition to writing some Python CLIs) that is a pretty nice next step on this spectrum is Bash-with-all-the-fixins'. I use a Nix-based dependency resolver for shell scripts called resholve\u00b9 to parse scripts so that it can identify ", "context": "", "use_case": "interactive shell scripts", "switched_from": "", "story": "Using Python for Scripting"}]}