Fzf

From wikinotes
Revision as of 14:20, 27 February 2022 by Will (talk | contribs) (→‎Usage)

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

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`

# Match 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

Examples

# Interactive
result=$(find . | fzf +m)     # choose single
results=($(find . | fzf -m))  # choose single or multiple

# Non-Interactive
find . | fzf --filter 'todo'  # print sorted matches for 'todo' on stdout

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