🌸 A command-line fuzzy finder
Go to file
Junegunn Choi 79fbcb2244 Rubygem packaging 2013-11-01 00:41:37 +09:00
plugin Update Vim plugin accordingly 2013-11-01 00:23:53 +09:00
.gitignore Add .gitignore 2013-11-01 00:41:12 +09:00
Gemfile Rubygem packaging 2013-11-01 00:41:37 +09:00
README.md Update README 2013-10-30 00:13:49 +09:00
Rakefile Rubygem packaging 2013-11-01 00:41:37 +09:00
fzf Improve startup time 2013-11-01 00:17:00 +09:00
fzf.gemspec Rubygem packaging 2013-11-01 00:41:37 +09:00
install Initial commit 2013-10-24 01:04:17 +09:00

README.md

fzf - Fuzzy finder for your shell

fzf is a general-purpose fuzzy finder for your shell.

It was heavily inspired by ctrlp.vim and the likes.

Requirements

fzf requires Ruby (>= 1.8.5).

Installation

Download fzf executable and put it somewhere in your search $PATH.

mkdir -p ~/bin
wget https://raw.github.com/junegunn/fzf/master/fzf -O ~/bin/fzf
chmod +x ~/bin/fzf

Or you can just clone this repository and run install script.

git clone https://github.com/junegunn/fzf.git
fzf/install

Make sure that ~/bin is included in $PATH.

export PATH=$PATH:~/bin

Install as Vim plugin

fzf was not designed to be a Vim plugin, but you can use it as one. The only reason one might consider using fzf in Vim is its speed. For a very large list of files, fzf is significantly faster than native Vim plugins.

You can use any Vim plugin manager to install fzf as a Vim plugin. If you don't use one, I recommend you try vim-plug.

  1. Install vim-plug

  2. Edit your .vimrc

     call plug#begin()
     Plug 'junegunn/fzf'
     " ...
     call plug#end()
    
  3. Run :PlugInstall

Usage

usage: fzf [options]

  -s, --sort=MAX   Maximum number of matched items to sort. Default: 500
  +s, --no-sort    Keep the sequence unchanged.
  +i               Case-sensitive match

fzf will launch curses-based finder, read the list from STDIN, and write the selected item to STDOUT.

find * -type f | fzf > selected

Without STDIN pipe, fzf will use find command to fetch the list of files (excluding hidden ones).

vim `fzf`

If you want to preserve the exact sequence of the input, provide --no-sort (or +s) option.

history | fzf +s

Key binding

Use CTRL-J and CTRL-K (or CTRL-N and CTRL-P) to change the selection, press enter key to select the item. CTRL-C will terminate the finder.

The following readline key bindings should also work as expected.

  • CTRL-A / CTRL-E
  • CTRL-B / CTRL-F
  • CTRL-W / CTRL-U

Usage as Vim plugin

If you install fzf as a Vim plugin, :FZF command will be added.

:FZF
:FZF --no-sort

You can override the command which produces input to fzf.

let g:fzf_command = 'find . -type f'

Useful bash examples

# vimf - Open selected file in Vim
vimf() {
  FILE=`fzf` && vim "$FILE"
}

# fd - cd to selected directory
fd() {
  DIR=`find ${1:-*} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf` && cd "$DIR"
}

# fda - including hidden directories
fda() {
  DIR=`find ${1:-*} -type d 2> /dev/null | fzf` && cd "$DIR"
}

# fh - repeat history
fh() {
  eval $(history | fzf +s | sed 's/ *[0-9]* *//')
}

# fkill - kill process
fkill() {
  ps -ef | sed 1d | fzf | awk '{print $2}' | xargs kill -${1:-9}
}

# CTRL-T - Open fuzzy finder and paste the selected item to the command line
bind '"\er": redraw-current-line'
bind '"\C-t": " \C-u \C-a\C-k$(fzf)\e\C-e\C-y\C-a\C-y\ey\C-h\C-e\er"'

License

MIT

Author

Junegunn Choi