This is an extension to Takeshi NISHIDA’s excellent Fuzzyfinder VIM script. It adds a TextMate mode, for completing file names in a similar fashion to how TextMate does file completion in its cmd-T window.
This extension is partially written in Ruby, and it depends on a separate Ruby module (fuzzy_file_finder), so you’ll need Vim to be compiled with Ruby support.
Usage is almost identical to the Fuzzyfinder script, so you should check out the documentation for that (which is very good). The only difference is that to start TextMate mode, you just invoke the :FuzzyFinderTextMate command. It is recommended to map that command to something more agile, e.g.:
Once in TextMate mode, completion is done against the entire directory tree at once, using partial matches. Results are sorted by “score”, which is a measure of how closely the file matches the text you entered.
There are several different variables that you may set in your .vimrc file that can be used to tweak the finder’s behavior:
- g:fuzzy_roots - this defaults to the current directory, but may be set to an array of paths that you want the finder to search.
- g:fuzzy_ceiling - this defaults to 10,000, and is the maximum number of files that the finder will scan before it raises an error. To use the finder on larger trees, set this variable to a value larger than the number of files you expect to scan.
- g:fuzzy_ignore - this is a delimited list of file glob patterns to ignore. Entries may be delimited using either semi-colons or commas.
- g:fuzzy_matching_limit - this is the maximum number of items that will be matched, and defaults to 200. If the finder feels sluggish to you, you can reduce this to something smaller (100, or 50).
For efficiency, the directories provided are never rescanned for changes. The :FuzzyFinderTextMateRefreshFiles command will force a rescan.
First, make sure you have the Fuzzyfinder script. Install that as per the instructions for that script.
Then, you’ll need to install the fuzzy_file_finder Ruby module. The simplest way to do this is via Rubygems:
gem install –source=http://gems.github.com jamis-fuzzy_file_finder
Alternatively, you can take the lib/fuzzy_file_finder.rb file from that project and put it in ~/.vim/ruby.
Lastly, you’ll need to install this extension script. Take the fuzzyfinder_textmate.vim script and put it under ~/.vim/plugin.
Most of this script and its supporting documentation is made available in the PUBLIC DOMAIN. It may be used, modified, and redistributed, almost without exception. The only exceptions are those parts of the code that were copied from NISHIDA’s original script; those parts are distributed under the MIT license, as indicated by NISHIDA’s code. The parts that were copied are indicated thus by comments.