fzf

It’s a general purpose fuzzy finder written in Go that can be used with any list of things: files, processes, command history, git branches, etc.

For Zsh, it provides the following key bindings (overwrite existing ones), and they are very handy:

  • M-C: Directory search, cd into the selected directory
  • C-t: Paste the selected file path(s) into the command line. Useful to insert quickly paths into arguments of commands.
  • vi $(fd \.yaml|fzf): run a command with the selected item from fzf as argument
  • mv $(fd -t directory|fzf) ~/Temp/, DANGER: move a directory from selected path to ~/Temp/

Fuzzy completion mode

  • Select multiple items in FZF: vi ** and press <TAB>

  • Select Files under parent directory: vi ../**<TAB>

  • Select Files under parent directory that match fzf: vi ../fzf**<TAB>

  • Select Files under your home directory: vi ~/**<TAB>

  • Find/Change to some directory under current directory (single-selection): cd **<TAB>

  • Select Host names: ssh **<TAB>

  • Select Telent: telnet **<TAB>

  • Select Directories under ~/.config that match nvim


cd ~/.config/nvim**<TAB>

  • Select Process IDs. Can select multiple processes with TAB or S-TAB

kill -9 **<TAB>

Select environment variable / aliases

  • unset **<TAB>
  • export **<TAB>
  • unalias **<TAB>

Using fzf with ripgrep

rg . | fzf: Fuzzy search every line in every file rg . | fzf | cut -d ":" -f 1: Fuzzy search every line, in every file, and return the file location

TODO