Fzf

From wikinotes

fzf is a tool that lets you fuzzy search lines piped to it on stdin.

Documentation

github https://github.com/junegunn/fzf
man fzf https://man.archlinux.org/man/community/fzf/fzf.1.en

Examples

result=$(find . | fzf +m)     # interactively choose one result
results=($(find . | fzf -m))  # interactively choose multiple results
find . | fzf -q todo          # interactively choose results, filtered in advance to those matching 'todo'
find . | fzf --filter todo     # print results fuzzy-matched to 'todo' on stdout

Usage

CLI Arguments

Search Modes

fzf \
  -q $SEARCH `# search interactively for $SEARCH` \
  -f $SEARCH `# print results for $SEARCH`
  `# if neither -q/-f, user types search interactively`

Match Customization

fzf \
  -m                     `# allow multiple-selections` \
  +m                     `# disallow multiple-selections` \
  -i                     `# case insensitive` \
  -e                     `# exact-matches only (like 'foo)` \
  --tiebreak=length,end  `# choose between equally scoring matches`

Query Syntax

foo        # fuzzy-matches
'foo       # exact-matches (rather than fuzzy)
^foo$      # anchored matches start/end
!foo       # results that don't match foo
foo | bar  # or
'foo bar   # compound matches

Keybindings

Default Keybindings

up/down  # go up/down entry
tab      # mark entry as selected (when multi-select active)
enter    # single-select and exit
# type   # search results

You can set your own keybindings as well
See AVAILABLE ACTIONS in man fzf

export FZF_DEFAULT_OPTS='\
--bind \
ctrl-a:select-all,\
ctrl-d:deselect-all'

Extensions

fzf-tab (fzf-on-tabcomplete) https://github.com/Aloxaf/fzf-tab

Configuration

fzf --color=light  # change fzf theme to light