Skip to content

fzf

One line: fzf reads lines on stdin, lets you narrow them by typing a fuzzy query, and writes the ones you pick to stdout. fzf --filter is the same matcher without the screen, so every ranking on these pages can be measured, and Ctrl-R is a pipeline you can run yourself.

Lesson Level What it settles
fzf is a filter 101 --filter, exit status 0, 1 and 2, --select-1 --exit-0, FZF_DEFAULT_OPTS reaching a script, and a query held in $q in bash, zsh and fish
Fuzzy means in order 201 In-order matching, the word-start bonuses, ties broken by length, --tiebreak, --scheme=path and --scheme=history, and an unquoted * in three shells
The extended search syntax 201 'exact, ^prefix, suffix$, !not, a lone bar for "or", --exact and +x, and the !, ^ and $ that each shell reads first
Smart case, and cafe finding Café 201 Smart case, -i and +i, folding for Café and Łódź and where it stops, --literal, NFC against NFD, and lowering a query under LC_ALL=C
Ctrl-R is a pipeline 301 The bash widget's fc, perl and --read0 stages run by hand on bash 3.2 and 5.2, zsh's $history, and fish's history -z

Installing fzf and turning on its key bindings is covered by the Rust library's Fuzzy finding ↗. These pages start where that one stops.