I’m now using fzf for fuzzy finding and no longer using CtrlP, but it was (and still) a great plugin to get started.
Sublime Text (or other editor) has a fuzzy finder feature that let us search for files within our project directory.
Imagine if we want to open specific file but we don’t know where it is located, or if we know where the file located but it is buried too deep inside folder directory (for example
app/very/long/namespace/controller/domestic.controller.js), it may be hard to find it.
That’s why this is a really powerful feature. And since we love vim (aren’t we?), we want this feature in our favorite editor too. Vim doesn’t have this feature out of the box, but don’t worry because there’s a plugin for that. Actually, there’s already vim plugin for (almost) every feature we need. For this task, there’s several option we can choose, and I personally have used Ctrl-P for almost a year. It’s simple and straightforward.
Installation guide can be found on its documentation.
By default, whenever we invoke Ctrl-P, it scans our project directory, entirely. It works fine when our directory is relatively small. But when we work with large codebase with over thousands of files, we’re most likely will find it quiet annoying. One way to workaround this problem is to utilize its caching mechanism. According to one of it’s plugin configuration option, it turns out that cache is already enabled by default, but it’s cleared every time we exit vim. We can keep the cache with this option; add this to vimrc
let g:ctrlp_clear_cache_on_exit = 0
Note that this automatically make our directory out of sync with Ctrl-P. So if we have new files, or rename any existing file, it will not appear immediately in Ctrl-P. To refresh or rescan our directory, we can use
let g:ctrlp_show_hidden = 1
To open Ctrl-P window we use, well,
ctrl-p. A new window will appear at the bottom, and there are by default three modes visible, and these are what we’ll use frequently. Use
ctrl-b to cycle between modes.
filessearch for all files within project directory
buffersearch for files that’s already open in buffer.
mrusearch for most recently used files.