What fzf Does
- Interactive filter — pipe any list, select one or many
- Fuzzy matching — type partial letters to narrow down
- Preview window — show file contents, git diff, commit message
- Multi-select —
--multifor selecting multiple items - Key bindings — Ctrl+T (files), Ctrl+R (history), Alt+C (dirs)
- Shell integrations — bash, zsh, fish auto-completions
- Composable — works with any
find,ls,git,ps,history
Architecture
Reads stdin, renders interactive TUI via termios. On Enter, writes selection to stdout. Matching algorithm combines substring match, camelCase boundaries, and path components for intelligent ranking.
Self-Hosting
CLI tool, zero runtime deps.
Key Features
- Super fast (Go + optimized matcher)
- Fuzzy matching with smart ranking
- Preview window
- Multi-select mode
- Shell key bindings
- Works with any input stream
- Customizable colors and layout
- Can trigger actions on selection
Comparison
| Tool | Matching | Preview | Speed |
|---|---|---|---|
| fzf | Fuzzy | Yes | Fastest |
| skim (sk) | Fuzzy | Yes | Fast (Rust) |
| peco | Fuzzy | No | Medium |
| fzy | Fuzzy | No | Fast (small) |
| percol | Fuzzy | Limited | Python |
常见问题 FAQ
Q: fzf 和 ripgrep 能一起用吗?
A: 绝配。rg --files | fzf 在 gitignore 感知的文件列表中模糊匹配。
Q: 怎么配合 tmux?
A: fzf 支持 --tmux 选项在浮动 pane 中显示。
Q: 怎么定义 preview?
A: fzf --preview "bat --color=always {}" --preview-window=right:60%
来源与致谢 Sources
- Docs: https://junegunn.github.io/fzf/
- GitHub: https://github.com/junegunn/fzf
- License: MIT