フォルダ間の移動を高速に「どこでもどあゔぃむー」

※音量をあげ、再生ボタンを押しましたら、さーご一緒に

こんなこといいな できたらいいな
あんなゆめ こんなゆめ いっぱい あるけど
みんなみんなみんな かなえてくれる
ふしぎなプラグインで かなえてくれる
ふぉるだかんのいどうを こうそくに
「ハイ!コントロールピーヴィムー」
アン アン アンッ とってもだいすき ヴィム エーディーター

この記事はVim Advent Calendar 2012 43日目の記事になります。
前回の記事は@takochuuさんのtagbar + ctagsでウキウキ新生活!という記事でした。オシャンティ!

経緯のお話し

rails.vimcake.vimのようにプロジェクトの各フォルダ間移動を、独自MVCで作られたプロジェクトにても… :Rmodel、:Rcontrollerと各フォルダへ高速に移動できるプラグインが欲しいので作ろう..と意気込んでいたのですが、年始にごにょごにゅしているうちにctrlp.vim拡張機能を使って近しいことができることを発見したので、そのトピックを2つほど紹介してみたいと思います。

「どこでもどあー ゔぃむー」のctrlp拡張プラグインを入れる

※尚、ctrlp.vimはgithubからcloneして最新版を入れて上げてください

プラグインというより、コマンドをただただ提供しているだけのプラグインです。
名前は「どこでもドア」にインスパイアされて命名してみました。

ctrlp-dokodemo-doa.vim

ctrlpのソースを呼んでたところ、ctrlp#initの第2引数にパスを渡してあげると、そこからファイル検索ができるよう仕組みが分かったので、プラグイン?とは言い難いのですがちょこっと実装して拡張してみました。

インストール方法は、上記URLのpluginフォルダにあるctrlp-dokodemo-doa.vimを ctrlp.vim/plugin/のポケットにいれてあげて、vimrcに下記設定を書いてあげれば、いつでもドラえもんがポケットから取り出してくれます。

let g:ctrlp_dokodemo_doa_settings = {
\  'YourProject' : {
\    'app_path' : '/path/to/your_project/',
\    'available' : 1,
\    'role_paths' : {
\      'controller' : 'app/controllers/',
\      'model' : 'app/models/',
\      'view' : 'app/views/'
\    }
\  },
\  'YourProject2' : {
\    'app_path' : '/path/to/your_project2/',
\    'available' : 0,                                                                                                                                     
\    'role_paths' : {
\      'controller' : 'app/controllers/',
\      'model' : 'app/models/',
\      'view' : 'app/views/'
\    }
\  },
\}

ctrlp_dokodemo_doa_settingsの第1階層がプロジェクトのキーとなっており、そのキーとその配下のrole_pathsのキーがそのままコマンドとして適用されます。
※キーの設定はユーザーコマンドの命名規則(半角英数)に従って名前付けをしてあげてください。

上記vimrcの設定ですと

:CtrlPDDYourProjectcontroller
:CtrlPDDYourProjectmodel
:CtrlPDDYourProjectview

の3つのコマンドが適用されます。尚、CtrlPDDはプレフィックスとなっています。

上記適用されたコマンドを入力し、目的の場所にてctlpのウィンドウが開きましたら、後は<c-h>、<c-v>、<c-t>とお好みの開き方でファイルを開いてあげたり、そのディレクトリ配下にてファイルを作成 or フォルダを作成したい場合は、ファイル名 or 作成したいフォルダ(フォルダを含む場合はhoge/hoge.rb)を入力して<c-y>で作成してくれます。ここはctrlp.vimの標準機能ですね、詳しくはドラエモンにhelpを参照してください。また上記設定のように、複数プロジェクトを抱えている..あ..設定をしますと、沢山のコマンドが羅列されて選択が大変でしたので、availableの有効設定値を設けてコマンドの非表示設定をできるようにしました。

複数人でこういうプロジェクトの開発をしていると、変なところにプログラムがおかてしまったり… とドキュメント関連とか整備されていればあれなのですが、ドキュメントなんて見ないことがほとんどですので、コマンド入力からフォルダ移動を強制するという意味で有効ではないかと思ったりしました。

名前についてはみんな大好きなドラえもんの道具を命名することで、Vimに取っ付きにくかった人も、名前から興味ができて一歩を踏み出すきっかけが 「できたらいいなー あんなゆめ こんなゆめ.. 」..失礼、よかったら是非使ってみてください。

:CtrlPBookmarkDirAddコマンドを使おう

ctrlp標準の拡張として提供されている機能です。

:CtrlPBookmarkDirAdd
:CtrlPBookmarkDir

各ディレクトリパスをブックマーク登録することができて、登録されたブックマークからファイル検索できるような仕組みが提供されております(この機能を使えば全てよかったんじゃ..)

最後に

ctrlpは先日上がったエントリのように、拡張機能を簡単に作れる仕組みがあるので 今度はもう少し突っ込んだプラグインを作ろうと思います。まだctrlp自体使っていない方がいましたら、ライフチェンジングなプラグインなので是非使うことをお勧めしますです。使い方はmattnさんの記事が非常に参考になると思います。 

明日は@yomi322さんです!

そんじゃーね!!!!!