natduca / quickopen

Instantly open files in Vim, Emacs, Slickedit within 500k-file projects with fuzziness
Apache License 2.0
45 stars 15 forks source link

quickopen lets you open files in Vim, Emacs and even SlickEdit quickly with fuzzy expressions, a live-updating UI, even for directory-trees containing hundreds of thousands of files. Its UI works on Mac, Linux, Windows, and even a curses mode if you're stuck on VPN.

Fuzzy? When you enter "rwh", quickopen finds files like

The results are ranked by relevance. In mere milliseconds. So you get new results as you type. Thus, you might refine rwh to rwhcpp to get render_widget_host.cpp

Key features:

Dependencies

Getting started

Get the code and dont forget to init the submodules.

git clone https://github.com/natduca/quickopen.git
git submodule update --init --recursive

Tell quickopen to index some directories...

  nduca: ~/quickopen $ ./quickopen add ~/Local/chrome
  nduca: ~/quickopen $ ./quickopen add ~/quickopen
  nduca: ~/quickopen $ ./quickopen ignore \*LayoutTests\*

Check quickopen's status:

  nduca: ~/quickopen $ ./quickopen rawsearch foo
  Database is not fully indexed. Wait a bit or try quickopen status

  nduca: ~/quickopen $ ./quickopen status
  Syncing: 17802 files found, 116 dirs pending

  nduca: ~/quickopen $ ./quickopen status
  up-to-date: 158553 files indexed; 2-threaded searches

VIM Setup

Using pathogen:

  1. http://github.com/tpope/vim-pathogen
  2. git submodule add https://github.com/natduca/quickopen ~/.vim/bundle/quickopen

Or, by hand in your .vimrc:

  1. source quickopen/plugin/quickopen.vim

You're done! To open things, you've got a few options:

Emacs Setup

By hand, in your .emacs:

(load "quickopen/elisp/quickopen.el")

Using site-lisp:

git clone https://github.com/natduca/quickopen.git ~/.emacs/site-lisp

And if site-lisp isn't set up yet:

(let ((site-lisp-dir (expand-file-name "~/.emacs/site-lisp")))
  (when (file-exists-p site-lisp-dir)
    (let ((default-directory site-lisp-dir))
      (normal-top-level-add-to-load-path '("."))
      (normal-top-level-add-subdirs-to-load-path))))

Consider binding ff-find-other-file to a hotkey if you haven't done so already. Quickopen will be used if the basic ff-find-other-file produces no results:

(global-set-key (kbd "M-o") (lambda ()
                              (interactive "")
                              (ff-find-other-file)
                              ))
(global-set-key (kbd "M-O") (lambda ()
                              (interactive "")
                              (ff-find-other-file t)
                              ))

You're done! To use quickopen, use M-S-o (meta-shift-o) or C-q.

Visual SlickEdit Setup

  1. Ensure that the directory containing quickopend is in your path.

  2. Load the quickopen macro module by clicking Macro > Load Module..., and selecting slickedit/QuickOpen.e.

  3. Now set up a key binding for quick open.

    • Click, Tools > Options...
    • Expand 'Keyboard and Mouse'
    • Select 'Key Bindings'
    • Type QuickOpen in the 'Search by command:' text box. If all goes well, this command will exist and be found.
    • Then click the 'Add..' button and bind to whichever keys you please, but I strongly recommend ctrl+shift+o for consistency with vim.

You're done. Use C-O (ctrl-shift-o) to open things.

Command Line Usage

  nduca: ~/quickopen $ ./quickedit
     <brings up a GUI for a picking a file,
      opens the picked file in $EDITOR>

If you want to hook into your favorite editor:

  nduca: ~/quickopen $ ./quickopen search --help