fzf is a general-purpose command-line fuzzy finder. On it’s own it’s not very useful but when combined with other tools it becomes super powerful.


Use homebrew to install fzf:

$ brew install fzf

If you want to use shell extensions (better shell integration):

$ /usr/local/opt/fzf/install

which gives you:

  • Key bindings (CTRL-T, CTRL-R, and ALT-C) (available for bash, zsh and fish)

  • Fuzzy auto-completion (available for bash and zsh)

Example Usages

Add any of these functions to your shell configuration file and apply the changes to try them out. Or just paste the function in your terminal if you just want to try it out without saving it.

# fd - cd to selected directory

fd() {
  local dir
  dir=$(find ${1:-.} -path '*/\.*' -prune \
                  -o -type d -print 2> /dev/null | fzf +m) &&
  cd "$dir"
# fh - search in your command history and execute selected command

fh() {
  eval $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed 's/ *[0-9]* *//')

For more fuzzy search examples see the official repo.

Chrome history from your terminal

Note: original blog post

Open up your shell config and add following function:

# ch - browse chrome history

ch() {
  local cols sep
  cols=$(( COLUMNS / 3 ))

  cp -f ~/Library/Application\ Support/Google/Chrome/Profile\ 1/History /tmp/h

  sqlite3 -separator $sep /tmp/h \
    "select substr(title, 1, $cols), url
     from urls order by last_visit_time desc" |
  awk -F $sep '{printf "%-'$cols's  \x1b[36m%s\x1b[m\n", $1, $2}' |
  fzf --ansi --multi | sed 's#.*\(https*://\)#\1#' | xargs open


See this fzf REPL