fzf - ArchWiki

Jump to content

# fzf

From ArchWiki

fzf is a general-purpose command-line fuzzy finder.

## Installation

Install the fzf package.

## Configuration

This article or section needs expansion.

Reason: It should be at least mentioned that shell completer is not the only usecase which requires configuration. (Discuss in Talk:Fzf)

### Shells

Optional fzf keybindings and completion are available for various shells:

- `Ctrl+t` list files+folders in current directory (e.g., type `git add` , press `Ctrl+t`, select a few files using `Tab`, finally `Enter`)
- `Ctrl+r` search history of shell commands
- `Alt+c` fuzzy change directory

#### Bash

Source the desired files from your .bashrc:

- `/usr/share/fzf/key-bindings.bash`
- `/usr/share/fzf/completion.bash`

From version 0.48 onwards, this can be accomplished with a single line:

- `eval "$(fzf --bash)"`

The original syntax is still supported and useful for user-customized versions of the scripts.

#### Zsh

Source the desired files from your .zshrc (after vi-mode, if using that, too):

- `/usr/share/fzf/key-bindings.zsh`
- `/usr/share/fzf/completion.zsh`

From version 0.48 onwards, this can be accomplished with a single line:

- `source <(fzf --zsh)`

#### fish

For fish, keybindings are in:

- `/usr/share/fish/vendor_functions.d/fzf_key_bindings.fish`

fish will source this by default but the bindings have to be enabled manually:

    ~/.config/fish/functions/fish_user_key_bindings.fish

    function fish_user_key_bindings
    	fzf_key_bindings
    end

fzf completion in fish can be enabled with custom functions: https://github.com/junegunn/fzf/wiki/Examples-(fish)

### Vim

The basic Vim plugin is already included within the package and installed to Vim's global plugin directory. Thus, you do not need to add anything to your `.vimrc` to be able to use it. It only provides the FZF command, though. There is an additional Vim plugin made by the author of fzf that defines some convenience functions, see https://github.com/junegunn/fzf.vim.

## Arch specific fzf uses

### Pacman

Try this to fuzzy-search through all available packages, with package info shown in a preview window, and then install selected packages:

    $ pacman -Slq | fzf --multi --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S

List all your installed packages, and then remove selected packages:

    $ pacman -Qq | fzf --multi --preview 'pacman -Qi {1}' | xargs -ro sudo pacman -Rns

If you want to add package file list in preview – may be a bit slower updating preview window (make sure you run `pacman -Fy` with root privileges at least once before invocation to sync the pacman file database):

    $ pacman -Slq | fzf --multi --preview 'cat <(pacman -Si {1}) <(pacman -Fl {1} | awk "{print \$2}")' | xargs -ro sudo pacman -S

## Alternatives

- skim – fuzzy finder written in Rust
- fzy – fuzzy finder/selector

Categories:

- Search
- Commands

Hidden category:

- Pages or sections flagged with Template:Expansion

fzf
Add topic