Announcing pick

Calle Erlandsson and Mike Burns

pick is a fuzzy search tool for the command-line. It is used to select an entry from a list.

pick reads a list of choices on stdin and outputs the selected choice on stdout. Therefore it is easily used both in shell pipelines and subshells.

pick serves the same purpose as selecta but is faster and utilizes the alternate screen terminal feature to not leave choices on screen after the program finishes execution.

Here are some things we use this for:

Switch between git branches

This is especially helpful for those long-running projects with far too many local branches.

git checkout $(git branch | cut -c 3- | pick)


Change to an arbitrary subdirectory

cd $(find . -type d | pick)


Find and kill a process

kill $(ps -e | awk '{if(NR!=1) { print $4, $1 }}' | pick -do | tail -n +2)


Find and edit a file containing a specific word

vim $(ag -l WORD | pick)


Change Ruby version

chruby $(chruby | sed -n 's/.*-//p' | pick)


Run a Rake task

rake $(rake -T | cut -f2 -d' ' | pick)


Run a command from the history

$(history | cut -c8- | sort -u | pick)


Find a file to edit from within Vim

Pick can also easily be used from within Vim both using system() and !.

To make pick even easier to use from within Vim we have written the pick.vim Vim plugin.

To fuzzy-find a file to edit in Vim, install pick.vim and add this mapping to your .vimrc:

nnoremap <Leader>p :call PickFile()<CR>

Please see the pick.vim README for more examples of how to use it. For examples of how to call pick from within Vim, see the pick.vim source code.

Please note: pick requires a fully functional terminal to run and therefore cannot be run from within gvim or MacVim.



On OS X, you can install pick via Homebrew:

brew tap thoughtbot/formulae
brew install pick

If you’re running Arch Linux you can install it using the AUR package:

tar -xzf pick.tar.gz
cd pick
makepkg -s
pacman -U pick-VERSION-x86_64.pkg.tar.xz

You can also build pick from source:

gpg --verify pick-VERSION.tar.gz.asc
tar -xzf pick-VERSION.tar.gz
cd pick-VERSION
make install

Don’t forget to check out the man page:

man pick


Please report bugs via GitHub issues.

Pull requests are very welcome. Please, see the contributing instructions for more info on how to get started.