# fzf

> Command-line fuzzy finder for filtering lists of files, processes, git commits, and other data with fuzzy matching.

Stars: 83.9k · Language: Go · Categories: Search

- Repository: https://github.com/junegunn/fzf
- Website: https://junegunn.github.io/fzf/
- Page: https://www.trmn.sh/tools/fzf

## Install

- Homebrew: `brew install fzf`
- APT: `sudo apt install fzf`
- Git: `git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install`

## Overview

fzf is a command-line fuzzy finder that provides interactive filtering for any kind of list data. It reads input from stdin or traverses the current directory by default, then presents an interactive interface where users can type patterns to filter results using fuzzy matching algorithms. The tool can handle millions of items instantly and supports omitting characters in search patterns while still returning relevant results.

The tool integrates deeply with shell environments through key bindings and completion systems. It provides CTRL-T for file selection, CTRL-R for command history search, and ALT-C for directory navigation in Bash, Zsh, and Fish shells. fzf also includes fuzzy completion that can be triggered with ** followed by tab for files, process IDs, hostnames, and environment variables.

fzf supports extensive customization through command-line options and environment variables. Users can configure display modes including popup windows, preview panes for file contents, custom color schemes, and event-action bindings. The tool also integrates with Vim and Neovim through plugins, and can execute external programs or reload candidate lists dynamically during operation.

### Installation

```bash
# via Homebrew
brew install fzf
```

```bash
# via APT
sudo apt install fzf
```

```bash
# via Git
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install
```

![fzf interactive interface](https://media.trmn.sh/cached/22ff14a1bdaa09e0588b30a1fa1b48b74d55bf3b9061af4b255b1c91d2165c03.png)

## Alternatives

- [peco](https://www.trmn.sh/tools/peco.md): Interactive line filter written in Go that reads stdin, filters incrementally as you type, and prints selected lines to stdout. Single binary, no dependencies. (Go, 7.9k stars)
- [sherlock](https://www.trmn.sh/tools/sherlock.md): CLI tool that searches for usernames across 400+ social networks and websites (Python, 95.4k stars)
- [ripgrep](https://www.trmn.sh/tools/ripgrep.md): Fast line-oriented regex search tool that recursively searches directories with automatic gitignore and binary file filtering (Rust, 69.6k stars)
- [fd](https://www.trmn.sh/tools/fd.md): Fast filesystem search tool that replaces find with regex patterns and smart defaults (Rust, 44.9k stars)
- [Maigret](https://www.trmn.sh/tools/maigret.md): OSINT CLI that searches about 5,900 sites for accounts by username and extracts profile data into reports, with no API keys required. (Python, 39.6k stars)

## Guides

- [Jump between directories with zoxide](https://www.trmn.sh/guides/zoxide-smarter-cd): Install zoxide, load it in bash, zsh or fish, jump with z and zi, import your autojump or z history, and replace cd with --cmd cd.
- [Search your shell history with fzf](https://www.trmn.sh/guides/fzf-history-search): Replace the default Ctrl-R with a fuzzy history search in bash, zsh or fish using fzf's shell integration.
- [Sync and search shell history across machines with atuin](https://www.trmn.sh/guides/atuin-shell-history-sync): Install atuin, import your existing shell history, search it with Ctrl-R and sync it end-to-end encrypted between machines.
- [fzf vs skim](https://www.trmn.sh/compare/fzf-vs-skim): Compare fzf, skim: workflows, strengths and tradeoffs.
- [fzf vs television](https://www.trmn.sh/compare/fzf-vs-television): Compare fzf, television: workflows, strengths and tradeoffs.

---

Canonical: https://www.trmn.sh/tools/fzf
