fzf

(★ 82,603)

:cherry_blossom: A command-line fuzzy finder

File Explorer

  • .editorconfig
  • .gitignore
  • .goreleaser.yml
  • .rubocop.yml
  • .tool-versions
  • ADVANCED.md
  • BUILD.md
  • CHANGELOG.md
  • Dockerfile
  • Gemfile
  • Gemfile.lock
  • go.mod
  • go.sum
  • install
  • install.ps1
  • LICENSE
  • main.go
  • Makefile
  • README-VIM.md
  • README.md
  • RELEASE.md
  • SECURITY.md
  • typos.toml
  • uninstall

# Installation Guide

go

Setup Steps

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf

Clone the repository to local path.

~/.fzf/install

Run the install script to set up binaries and shell integration.

Key Commands

brew install fzf

Install fzf using Homebrew.

fzf

Run the fzf fuzzy finder in the terminal.

After installation, you need to add shell integration scripts to your shell config file.

# Use via CDN

jsDelivr

jsDelivr serves any public GitHub repository as a CDN with zero setup. Pick a version and a file to get a ready-to-paste link and snippet.

Release Timeline

Actively Maintained

Command Glossary

Commands referenced in this DOCs, explained below.

🔍

pkg

View Details ▼

Package management utility for Termux.

pkg {{[up|upgrade]}}

Upgrade all installed packages:

pkg install {{package}}

Install a new package:

tldr pkg_add

View documentation for installing/updating packages:

🔍

dir

View Details ▼

List files.

dir

List files in the current working directory:

tldr ls

View documentation for the original command:

dir

Show the contents of the current directory:

🔍

line

View Details ▼

Manage lines.
Accessed in configuration mode.

line vty 0 15

Configure lines from 0 to 15:

line

Read input:

🔍

awk

View Details ▼

A versatile programming language for working on files.
Note: Different implementations of AWK often make this a symlink of their binary.
See also: `gawk`.

awk '{print $5}' {{path/to/file}}

Print the fifth column (a.k.a. field) in a space-separated file:

awk '/{{foo}}/ {print $2}' {{path/to/file}}

Print the second column of the lines containing "foo" in a space-separated file:

awk -F ',' '{print $NF}' {{path/to/file}}

Print the last column of each line in a file, using a comma (instead of space) as a field separator:

🔍

brew install

View Details ▼

Install a Homebrew formula or cask.

brew install {{formula|cask}}

Install a formula/cask:

brew install {{[-s|--build-from-source]}} {{formula}}

Build and install a formula from source (dependencies will still be installed from bottles):

brew install {{[-n|--dry-run]}} {{formula|cask}}

Download the manifest, print what would be installed but don't actually install anything:

🔍

brew update

View Details ▼

Fetch the newest version of Homebrew and all formulae from GitHub using `git` and perform any necessary migrations.
To upgrade all installed formulae, use `brew upgrade`.

brew {{[up|update]}}

Fetch the newest version of Homebrew and all formulae:

🔍

complete

View Details ▼

Get and set argument autocompletion rules of shell commands in Bash.
The specified completions will be invoked when `<Tab>` is pressed in Bash.
See also: `compgen`, `compopt`.

complete -F {{function}} {{command}}

Set arguments of a command to autocomplete through a function (completion response is sent in `$COMPREPLY` variable):

complete -C {{autocomplete_command}} {{command}}

Set arguments of a command to autocomplete through another command (`$1` is the command, `$2` is the argument the cursor is on, and `$3` is the argument preceding the cursor):

complete -b {{command}}

Set arguments of a command to autocomplete to shell builtins:

🔍

conda install

View Details ▼

Install packages into an existing conda environment.

conda install {{package1 package2 ...}}

Install one or more package into the currently active conda environment:

conda install {{[-c|--channel]}} conda-forge {{package}}

Install a single package into the currently active conda environment using channel conda-forge:

conda install {{[-c|--channel]}} conda-forge --override-channels {{package}}

Install a single package into the currently active conda environment using channel conda-forge and ignoring other channels:

🔍

esac

View Details ▼

This shell keyword is used to end a `case` statement.

tldr case

View documentation for the `case` keyword:

🔍

fish

View Details ▼

The Friendly Interactive SHell, a command-line interpreter designed to be user friendly.

fish

Start an interactive shell session:

fish {{[-N|--no-config]}}

Start an interactive shell session without loading startup configs:

fish {{[-c|--command]}} "{{echo 'fish is executed'}}"

Execute specific commands:

🔍

fzf

View Details ▼

Fuzzy finder.
Similar to `sk`.

find {{path/to/directory}} -type f | fzf

Start `fzf` on all files in the specified directory:

ps aux | fzf

Start `fzf` for running processes:

find {{path/to/directory}} -type f | fzf {{[-m|--multi]}} > {{path/to/file}}

Select multiple files with `<Shift Tab>` and write to a file:

🔍

git clone

View Details ▼

Clone an existing repository.

git clone {{remote_repository_location}} {{path/to/directory}}

Clone an existing repository into a new directory (the default directory is the repository name):

git clone --recursive {{remote_repository_location}}

Clone an existing repository and its submodules:

git clone {{[-n|--no-checkout]}} {{remote_repository_location}}

Clone only the `.git` directory of an existing repository:

🔍

git grep

View Details ▼

Find strings inside tracked files in a repository.
Accepts a lot of the same flags as regular `grep`.

git grep "{{search_string}}"

Search for a string in files in the current `HEAD`:

git grep "{{search_string}}" -- "{{*.ext}}"

Search for a string in files matching a glob pattern in the current `HEAD`:

git grep --recurse-submodules "{{search_string}}"

Search for a string, including submodules:

🔍

git log

View Details ▼

Show a history of commits.

git log

Show the sequence of commits starting from the current one, in reverse chronological order of the Git repository in the current working directory:

git log {{[-p|--patch]}} {{path/to/file_or_directory}}

Show the history of a particular file or directory, including differences:

git log --stat

Show an overview of which file(s) changed in each commit:

🔍

git ls-files

View Details ▼

Show information about files in the index and the working tree.

git ls-files {{[-d|--deleted]}}

Show deleted files:

git ls-files {{[-m|--modified]}}

Show modified and deleted files:

git ls-files {{[-o|--others]}}

Show ignored and untracked files:

🔍

man

View Details ▼

Format and display manual pages.
See also: `whatis`, `apropos`.

man {{command}}

Display the man page for a command:

man {{[-H|--html=]}}{{browser_name}} {{command}}

Open the man page for a command in a browser (`=browser_name` can be omitted if `$BROWSER` is set):

man 7 {{command}}

Display the man page for a command from section 7:

🔍

mise

View Details ▼

Manage language runtimes like Node.js, Python, Ruby, Go, Java, etc and various tools.

mise plugins list-all

List all available plugins:

mise plugins add {{name}}

Install a plugin:

mise ls-remote {{name}}

List runtime versions available for install:

🔍

nix-env

View Details ▼

Manipulate or query Nix user environments.

nix-env {{[-q|--query]}}

List all installed packages:

nix-env {{[-q|--query]}} {{search_pattern}}

Query installed packages (`regex` is supported):

nix-env {{[-qa|--query --available]}} {{search_pattern}}

Query available packages from the Nixpkgs registry:

🔍

seq

View Details ▼

Output a sequence of numbers to `stdout`.

seq 10

Print a sequence from 1 to 10:

seq 10 20

Print a sequence from 10 to 20:

seq 5 3 20

Print every 3rd number from 5 to 20:

🔍

shift

View Details ▼

Move positional parameters.

shift

Remove the first positional parameter:

shift {{n}}

Remove the first `n` positional parameters:

🔍

ssh

View Details ▼

Secure Shell is a protocol used to securely log onto remote systems.
It can be used for logging or executing commands on a remote server.

ssh {{username}}@{{remote_host}}

Connect to a remote server:

ssh {{username}}@{{remote_host}} -i {{path/to/key_file}}

Connect to a remote server with a specific [i]dentity (private key):

ssh {{username}}@10.0.0.1 -p {{2222}}

Connect to a remote server with IP `10.0.0.1` and using a specific [p]ort (Note: `10.0.0.1` can be shortened to `10.1`):

🔍

unset

View Details ▼

Remove shell variables or functions.

unset {{variable}}

Remove variable, or if the variable doesn't exist, remove the function of the same name:

unset -v {{variable1 variable2 ...}}

Remove variables:

unset -f {{function_name1 function_name2}}

Remove the function:

🔍

vim

View Details ▼

Vim (Vi IMproved), a command-line text editor, provides several modes for different kinds of text manipulation.
Pressing `<i>` in normal mode enters insert mode. Pressing `<Esc>` goes back to normal mode, which enables the use of Vim commands.
See also: `vimdiff`, `vimtutor`, `nvim`, `gvim`.

vim {{path/to/file}}

Open a file:

vim +{{line_number}} {{path/to/file}}

Open a file at a specified line number:

<:>help<Enter>

View Vim's help manual:

🔍

xargs

View Details ▼

Execute a command with piped arguments coming from another command, a file, etc.
The input is treated as a single block of text and split into separate pieces on spaces, tabs, newlines, and end-of-file.
See also: `parallel`.

{{arguments_source}} | xargs {{command}}

Run a command using the input data as arguments:

{{arguments_source}} | xargs sh -c "{{command1}} && {{command2}} | {{command3}}"

Run multiple chained commands on the input data:

{{arguments_source}} | xargs {{[-n|--max-args]}} 1 {{command}}

Execute a new command with each argument:

🔍

apk

View Details ▼

Alpine Linux package management tool.

apk upgrade {{[-U|--update-cache]}}

Update repository indexes and upgrade all packages:

apk update

Only update repository indexes:

apk add {{package}}

Install a new package:

🔍

apt install

View Details ▼

Install packages for Debian-based distributions.

sudo apt install {{package}}

Install a package, or update it to the latest version:

sudo apt install {{[-V|--verbose-versions]}} {{package}}

Display verbose package version information during installation or update:

🔍

apt

View Details ▼

Package manager for Debian-based distributions.
Intended as a user-friendly alternative to `apt-get` for interactive use.
For equivalent commands in other package managers, see <https://wiki.archlinux.org/title/Pacman/Rosetta>.

sudo apt update

Update the list of available packages and versions (recommended before running other `apt` commands):

apt search {{package}}

Search packages by name or description:

apt list {{package}}

Search packages by name only (supports wildcards like `*`):

🔍

dnf install

View Details ▼

Install packages on Red Hat-based distributions.

sudo dnf {{[in|install]}} {{package1 package2 ...}}

Install packages by name:

sudo dnf {{[in|install]}} {{path/to/file}}

Install a package from a local file:

sudo dnf {{[in|install]}} {{https://example.com/package.rpm}}

Install a package from the internet:

🔍

emerge

View Details ▼

Gentoo Linux package manager utility.
For equivalent commands in other package managers, see <https://wiki.archlinux.org/title/Pacman/Rosetta>.

sudo emerge --sync

Synchronize all packages:

sudo emerge {{[-avuDN|--ask --verbose --update --deep --newuse]}} @world

Update all packages, including dependencies:

sudo emerge --resume --skipfirst

Resume a failed update, skipping the failing package:

🔍

pacman -S

View Details ▼

This command is an alias of `pacman --sync`.

tldr pacman sync

View documentation for the original command:

🔍

xbps-install

View Details ▼

XBPS utility to (re)install and update packages.
See also: `xbps`.

xbps-install {{package}}

Install a new package:

xbps-install {{[-Su|--sync --update]}}

Synchronize and update all packages:

🔍

zypper

View Details ▼

SUSE & openSUSE package management utility.
For equivalent commands in other package managers, see <https://wiki.archlinux.org/title/Pacman/Rosetta>.

sudo zypper {{[ref|refresh]}}

Synchronize list of packages and versions available:

sudo zypper {{[in|install]}} {{package}}

Install a new package:

sudo zypper {{[rm|remove]}} {{package}}

Remove a package:

🔍

pkgin

View Details ▼

Manage `pkgsrc` binary packages on NetBSD.

pkgin install {{package}}

Install a package:

pkgin remove {{package}}

Remove a package and its dependencies:

pkgin full-upgrade

Upgrade all packages:

🔍

pkg_add

View Details ▼

Install/update packages in OpenBSD.
See also: `pkg_info`, `pkg_delete`.

pkg_add -u

Update all packages, including dependencies:

pkg_add {{package}}

Install a new package:

pkg_add -l {{path/to/file}}

Install packages from the raw output of `pkg_info`:

🔍

choco install

View Details ▼

Install one or more packages with Chocolatey.

choco install {{package1 package2 ...}}

Install one or more packages:

choco install {{path\to\packages_file.config}}

Install packages from a custom configuration file:

choco install {{path\to\file}}

Install a specific `.nuspec` or `.nupkg` file:

🔍

choco upgrade

View Details ▼

Upgrade one or more packages with Chocolatey.

choco upgrade {{package1 package2 ...}}

Upgrade one or more packages:

choco upgrade {{package}} --version {{version}}

Upgrade to a specific version of a package:

choco upgrade all

Upgrade all packages:

🔍

scoop

View Details ▼

The Scoop package manager.
Some subcommands such as `bucket` have their own usage documentation.

scoop install {{package}}

Install a package:

scoop uninstall {{package}}

Remove a package:

scoop update --all

Update all installed packages:

🔍

winget

View Details ▼

Windows Package Manager.

winget {{[add|install]}} {{package}}

Install a package (use `--source` when package is available from multiple sources):

winget {{[rm|uninstall]}} {{package}}

Remove a package (Note: `remove` can also be used instead of `uninstall`):

winget show {{package}}

Display information about a package:

// repository documentation