Loading repository data…
Loading repository data…
junegunn / repository
:cherry_blossom: A command-line fuzzy finder
fzf is a general-purpose command-line fuzzy finder and an interactive terminal toolkit.
Whether you're selecting files, browsing command history, previewing data, navigating complex datasets with fuzzy matching, or creating custom menus and workflows, fzf provides the building blocks to turn shell scripts into rich terminal applications.
You can use Homebrew (on macOS or Linux) to install fzf.
brew install fzf
[!IMPORTANT] To set up shell integration (key bindings and fuzzy completion), see the instructions below.
fzf is also available via MacPorts: sudo port install fzf
You can use mise to install fzf.
mise use -g fzf@latest
| Package Manager | Linux Distribution | Command |
|---|---|---|
| APK | Alpine Linux | sudo apk add fzf |
| APT | Debian 9+/Ubuntu 19.10+ | sudo apt install fzf |
| Conda | conda install -c conda-forge fzf | |
| DNF | Fedora | sudo dnf install fzf |
| Nix | NixOS, etc. | nix-env -iA nixpkgs.fzf |
| Pacman | Arch Linux | sudo pacman -S fzf |
| pkg | FreeBSD | pkg install fzf |
| pkgin | NetBSD | pkgin install fzf |
| pkg_add | OpenBSD | pkg_add fzf |
| Portage | Gentoo | emerge --ask app-shells/fzf |
| Spack | spack install fzf | |
| XBPS | Void Linux | sudo xbps-install -S fzf |
| Zypper | openSUSE | sudo zypper install fzf |
[!IMPORTANT] To set up shell integration (key bindings and fuzzy completion), see the instructions below.
On Windows, fzf is available via Chocolatey, Scoop, Winget, and MSYS2:
| Package manager | Command |
|---|---|
| Chocolatey | choco install fzf |
| Scoop | scoop install fzf |
| Winget | winget install fzf |
| MSYS2 (pacman) | pacman -S $MINGW_PACKAGE_PREFIX-fzf |
Alternatively, you can "git clone" this repository to any directory and run install script.
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
The install script will add lines to your shell configuration file to modify
$PATH and set up shell integration.
You can download the official fzf binaries from the releases page.
Add the following line to your shell configuration file.
# Set up fzf key bindings and fuzzy completion
eval "$(fzf --bash)"
# Set up fzf key bindings and fuzzy completion
source <(fzf --zsh)
# Set up fzf key bindings
fzf --fish | source
source, so the install
script generates a file in the autoload directory. If you didn't use the
install script, you can manually set it up:
# Generate the integration script
mkdir ($nu.default-config-dir | path join "autoload")
fzf --nushell | save -f ($nu.default-config-dir | path join "autoload" "_fzf_integration.nu")
[!NOTE]
--bash,--zsh,--fish, and--nushelloptions are only available in recent versions of fzf. If you have an older version of fzf, or want finer control, you can source individual script files in the /shell directory. The location of the files may vary depending on the package manager you use. Please refer to the package documentation for more information. (e.g.apt show fzf)
[!TIP] You can disable CTRL-T, CTRL-R, or ALT-C bindings by setting the corresponding
*_COMMANDvariable to an empty string when sourcing the script. For example, to disable CTRL-R and ALT-C:
- bash:
FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --bash)"- zsh:
FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= source <(fzf --zsh)- fish:
fzf --fish | FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= source- nushell: add to your
env.nu:$env.FZF_CTRL_R_COMMAND = ""; $env.FZF_ALT_C_COMMAND = ""Setting the variables after sourcing the script will have no effect.
If you use vim-plug, add this to your Vim configuration file:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
junegunn/fzf provides the basic library functions
fzf#install() makes sure that you have the latest binaryjunegunn/fzf.vim is a separate project
that provides a variety of useful commandsTo learn more about the Vim integration, see README-VIM.md.
[!TIP] If you use Neovim and prefer Lua-based plugins, check out fzf-lua.
fzf is being actively developed, and you might want to upgrade it once in a while. Please follow the instruction below depending on the installation method used.
cd ~/.fzf && git pull && ./installbrew update; brew upgrade fzfsudo port upgrade fzfchoco upgrade fzf:PlugUpdate fzfSee BUILD.md.
fzf will launch interactive finder, read the list from STDIN, and write the selected item to STDOUT.
find * -type f | fzf > selected
Without STDIN pipe, fzf will traverse the file system under the current directory to get the list of files.
vim $(fzf)
[!NOTE] You can override the default behavior
- Either by setting
$FZF_DEFAULT_COMMANDto a command that generates the desired list- Or by setting
--walker,--walker-root, and--walker-skipoptions in$FZF_DEFAULT_OPTS
[!WARNING] A more robust solution would be to use
xargsbut we've presented the above as it's easier to grasp