fzf - ArchWiki

Jump to content

# fzf

From ArchWiki

fzf is a general-purpose command-line fuzzy finder and an interactive terminal toolkit. From the official website:

  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.

## 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
- television – Fast, portable and hackable fuzzy finder

Categories:

- Search
- Commands

Hidden category:

- Pages or sections flagged with Template:Expansion

fzf
Add topic