2013-10-23 23:25:19 -04:00
|
|
|
fzf - Fuzzy finder for your shell
|
|
|
|
=================================
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
fzf is a general-purpose fuzzy finder for your shell.
|
|
|
|
|
2013-10-29 09:14:11 -04:00
|
|
|
![](https://raw.github.com/junegunn/i/master/fzf.gif)
|
2013-10-28 02:50:46 -04:00
|
|
|
|
2013-10-23 23:25:19 -04:00
|
|
|
It was heavily inspired by [ctrlp.vim](https://github.com/kien/ctrlp.vim) and
|
|
|
|
the likes.
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
Requirements
|
|
|
|
------------
|
|
|
|
|
2013-10-23 23:25:19 -04:00
|
|
|
fzf requires Ruby (>= 1.8.5).
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
Installation
|
|
|
|
------------
|
|
|
|
|
|
|
|
Download fzf executable and put it somewhere in your search $PATH.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
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](https://github.com/junegunn/fzf/blob/master/install) script.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
git clone https://github.com/junegunn/fzf.git
|
|
|
|
fzf/install
|
|
|
|
```
|
|
|
|
|
|
|
|
Make sure that ~/bin is included in $PATH.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
export PATH=$PATH:~/bin
|
|
|
|
```
|
|
|
|
|
2013-10-31 12:12:46 -04:00
|
|
|
### Install as Ruby gem
|
|
|
|
|
|
|
|
fzf can be installed as a Ruby gem
|
|
|
|
|
|
|
|
```
|
|
|
|
gem install fzf
|
|
|
|
```
|
|
|
|
|
|
|
|
However, this is not recommended since the Ruby gem version of fzf takes
|
|
|
|
slightly longer to start.
|
|
|
|
|
|
|
|
### Install as Vim plugin
|
2013-10-22 21:26:55 -04:00
|
|
|
|
2013-10-29 11:13:49 -04:00
|
|
|
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](https://github.com/junegunn/vim-plug).
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
1. [Install vim-plug](https://github.com/junegunn/vim-plug#usage)
|
|
|
|
2. Edit your .vimrc
|
|
|
|
|
|
|
|
call plug#begin()
|
|
|
|
Plug 'junegunn/fzf'
|
|
|
|
" ...
|
|
|
|
call plug#end()
|
|
|
|
|
|
|
|
3. Run `:PlugInstall`
|
|
|
|
|
|
|
|
Usage
|
|
|
|
-----
|
|
|
|
|
2013-10-25 05:31:16 -04:00
|
|
|
```
|
|
|
|
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
|
|
|
|
```
|
|
|
|
|
2013-10-22 21:26:55 -04:00
|
|
|
fzf will launch curses-based finder, read the list from STDIN, and write the
|
|
|
|
selected item to STDOUT.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
find * -type f | fzf > selected
|
|
|
|
```
|
|
|
|
|
|
|
|
Without STDIN pipe, fzf will use find command to fetch the list of
|
|
|
|
files (excluding hidden ones).
|
|
|
|
|
|
|
|
```sh
|
|
|
|
vim `fzf`
|
|
|
|
```
|
|
|
|
|
2013-10-25 05:31:16 -04:00
|
|
|
If you want to preserve the exact sequence of the input, provide `--no-sort` (or
|
|
|
|
`+s`) option.
|
2013-10-24 05:56:33 -04:00
|
|
|
|
|
|
|
```sh
|
2013-10-25 05:31:16 -04:00
|
|
|
history | fzf +s
|
2013-10-24 05:56:33 -04:00
|
|
|
```
|
|
|
|
|
2013-10-22 21:26:55 -04:00
|
|
|
### 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
|
|
|
|
|
2013-10-24 05:56:33 -04:00
|
|
|
Usage as Vim plugin
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
If you install fzf as a Vim plugin, `:FZF` command will be added.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
:FZF
|
|
|
|
:FZF --no-sort
|
|
|
|
```
|
|
|
|
|
|
|
|
You can override the command which produces input to fzf.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:fzf_command = 'find . -type f'
|
|
|
|
```
|
|
|
|
|
|
|
|
Useful bash examples
|
|
|
|
--------------------
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
```sh
|
|
|
|
# vimf - Open selected file in Vim
|
2013-10-24 11:40:04 -04:00
|
|
|
vimf() {
|
|
|
|
FILE=`fzf` && vim "$FILE"
|
|
|
|
}
|
2013-10-22 21:26:55 -04:00
|
|
|
|
|
|
|
# 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"
|
|
|
|
}
|
|
|
|
|
2013-10-24 05:56:33 -04:00
|
|
|
# fh - repeat history
|
|
|
|
fh() {
|
2013-10-25 05:31:16 -04:00
|
|
|
eval $(history | fzf +s | sed 's/ *[0-9]* *//')
|
2013-10-24 05:56:33 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# fkill - kill process
|
|
|
|
fkill() {
|
|
|
|
ps -ef | sed 1d | fzf | awk '{print $2}' | xargs kill -${1:-9}
|
|
|
|
}
|
|
|
|
|
2013-10-22 21:26:55 -04:00
|
|
|
# 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
|
|
|
|
|