/quickfind

Fuzzy find for the terminal

Primary LanguagePythonApache License 2.0Apache-2.0

quickfind

Fuzzy finder for the terminal. quickfind can search files in the file system, ctags files, or anything that can pipe.

Install

To install from Pypi:

pip install quickfind

To install the faster version with ctags from Pypi:

pip install quickfind[ctags,fsnix]

To upgrade to the latest version:

pip install quickfind --upgrade

To install from source, clone the repo and type:

python setup.py install

in the directory.

'sudo' might be needed, depending on permissions.

To Use

quickfind has two builtin forms: File search and CTags search, with File search as default.

After installation, a new executable is added to the path 'qf'. To use:

qf # for file search 

qf -c # To search tags in CTags file

and start typing! quickfind can be configured to match against file name and/or path while selecting either files, directories, or both. By default, it filters out files listed in a tree's .gitignore.

The Up/Down (or Alt-P/Alt-N) keys selects which file to open. Enter opens selects the highlighted file. In multiple select mode, toggles the inclusion of the selected file.

Sometimes a single query isn't enough to differentiate between the files. By pressing Tab, quickfind will add another 'searcher' query for additional filtering.

Multiple files

Multiple entries can be selected when the '-m' flag is provided. In multiselect mode, 'Enter' adds the highlighted file to the selection. After all selections have been made, ctrl+D exits quickfind with the selected entries.

Stdin

quickfind can search on stdin:

find . -type f | qf

quickfind can further be extended to execute custom commands after an item as been selected:

# To kill a process
ps aux | qf -f "kill -9 {2}"

quickfind similarly can output to stdout with the '-o' flag rather than exec-ing the formatted command:

# To view man a file
man $(man -k . | qf -f "{1}" -o)

Commands

By default, quickfind will execute "$EDITOR {0}", where "{0}" represents the entire selected record. In "{N}", N represents the Nth piece split by the delimiter specified by -D. By default, the delimiter is whitespace.

Vim

A basic vim plugin has been developed to open files up with quickfind. To install, copy plugin/qf.vim to your vim plugin directory (usually ~/.vim/plugin/). To use, simply type :QF in normal mode to open up the quickfind daemon and choose the file to open. :TS triggers quickfind with ctags.

Tricks

Add to your .bashrc:

# To add ctrl+f as a qf hotkey.

bind '"\C-f": "qf\n"'

# To enable a new bash command, 'qcd', for quickly cd-ing to a directory.
function qcd() {
    _OFILE=$(qf -d -o -f "{0}")
    if [ -n "$_OFILE" ]; then
        cd $_OFILE
    fi
    unset _OFILE
}

# To easily kill processes
alias qkill="ps aux | qf - -f 'kill -f {2}'"

# To easily git add a file
alias gadd="git status --short | qf -m -f 'git add {2}'"