Hatena::Groupvim

vimまっしぐら★ このページをアンテナに追加 RSSフィード

tokoromのその他の日記

2010-10-02

FuzzyFinderの「FufFile **/」が最強:利用頻度1日数十回

12:00

fuf.vim の導入

FuzzyFinderは前から取り入れていたつもりだったのだが、恥ずかしながらたまーにタブがたくさんになりすぎたときにFufBuffer*1でバッファの中から任意のものを探すときくらいにしか使っていませんでした。

その頻度、1ヶ月に1回くらい。

そのため、なぜにFuzzyFinderがそこまで使われているかということを理解できていませんでした。


先日、ひさびさにFuzzyFinderBufferを使って、思い立ってこのプラグインを最新にしてみようと

を訪れたところ、ずいぶん新しくなっているよう。

プラグインのファイル名さえも fuf.vim に変わっておりびっくり。

※ちなみに今のバージョンは l9.vim という別のプラグインを入れないと動かないので注意


ということで、最新の fuf.vim を入れなおして、ヘルプやココなどを参照させていただいて、どんな機能が追加されているかなど確認していたら、どうやら

FufFile **/

というのがすごく便利とのこと。

FufFileはカレントディレクトリのファイル&ディレクトリを曖昧な単語で絞り込んでバッファに開けるというものなのだが、FufFile **/ とするとサブディレクトリの中のファイルも再帰的に検索してくれるので、

XCodeのプロジェクトのルートをカレントにして、その中のファイルならどれでも適当な単語を入力して開くことができる

ということになります。

これで「任意のファイルを開く」ことに関してはどんなIDEよりも便利になった気がします。

以下は実際に使っているスクリーンショットです。

ここでは「grid」とだけ打つことで、複数のディレクトリにあるそれっぽいファイルが候補としてあがってきています。

f:id:tokorom:20101002115256p:image


タブとの組み合わせでさらに常用!

私はVimのタブを愛用しているのですが、FuzzyFinder君は、基本的に

  • バッファ(タブ)の切り替え: FufBuffer
  • ファイルを開く: FufFile

となっており、それが統合されたら便利なのにな...と思ったわけですが、じつは普通にできるようです。

ヘルプを眺めていたら

<C-l> (|g:fuf_keyOpenTabpage|) - opens in a new tab page.

とあり、じつはファイルを絞り込んだ後に「Ctrl+l」でそのファイルをタブとして開けることがわかりました。

そして、既にそのファイルがタブになってれば当然そのタブに切り替わる!

ということで、vimrcで以下のようにキーバインドを切り替えておけば、

let g:fuf_keyOpen = '<Tab>'
let g:fuf_keyOpenTabpage = '<CR>'

既にそのファイルのタブがあるなしに関わらず「FufFile **/」一択で、選んだファイルをReturn*2すれば、プロジェクト内のファイルはどれでもすぐに簡単に開くことができるようになります。

単にファイルを開くというだけのことですが、これには感動すら覚えました。

そしてこれにより、FuzzyFiderの利用度が一日数十回以上に跳ね上がりました。

「ファイルを開く」「タブを切り替える」のどちらの操作でも使うようになったので当然と言えば当然です。


ちなみに、fuf_keyOpenのほうに<Tab>を設定しておくと、**/ をつけずにFufFileを使ったときに、ディレクトリを下っていく際に Tab*3を使い、ファイルが見つかったらReturnとできるので便利です。私はTerminalやVimのコマンドモードの補完を C-i でやっているのでそれが自然な操作でした。


ちなみに私の場合は、この他、FuzzyFinder関連のキーバインドは以下のようにしています。

nnoremap [MyPrefix].f             :<C-u>FufFile **/<CR>
nnoremap [MyPrefix].r             :<C-u>FufMruFile<CR>

今のところ「FufFile **/」「FufMruFile」以外は使っておりません。


とにかくFuzzyFinderのおかげでコーディング時間が1%くらい時間短縮された気がしているのです。

FuzzyFinderばんざーいっ!

FufFile **/ ばんざーいっ!!

*1:今はFufBufferというコマンド名になっているが、自分が使っていたのはFuzzyFinderBufferとなっていたのでずいぶん前のバージョンなんだと思う

*2:自分の場合はC-m

*3:自分の場合はC-i