[Vim Plugin]CtrlPの紹介と便利な使い方、設定

今回は、Vim PluginであるCtrlPについてです。

みなさんはディレクトリツリーを辿って、ファイルを探すことで手一杯になったりしていませんか?
編集するまでに疲れちゃいますよね。 集中力も途切れちゃいます。
ファイルを見つけて編集開始した時には、何を修正しようとしていたかも忘れてたりしてますよね…

そんな苦労を消し去るのが今回紹介するCtrlPです。

CtrlPとは

インクリメンタルサーチ機能を主としたファイルオープナープラグインです。
バッファ管理にも使える優秀なプラグインで、検索はディレクトリ/ファイル含めた前方一致検索 または 正規表現による検索が可能です。

上記画像は、インクリメンタルサーチでindex.htmlを現在のカレントディレクトリ以下を再帰的に検索している様子です。

各IDEでCtrlPの機能を説明すると、以下の様な感じです。

  • EclipseのCtrl + Shift + rによるリソースを開く
  • Sublime Text のCtrl + pのプレビュー機能無し版
  • XcodeのCmd + Shift + o指定して開く

kien/ctrlp.vim


基本的な使い方

モードについて

CtrlP起動中に Ctrl + f or bを押下することでモードを切り替えることができます。
また、各モード中にCtrl + rを押下することで、通常の前方一致検索と正規表現検索を切り替えることができます。

ファイル検索

前方一致

基本のモードです。通常の検索と正規表現の検索の2種類があります。
モード表示はfilesになります。

デフォルトで Ctrl + p にマッピングされています。
キーを押下するごとにファイルが絞りこまれ、 enter↵でファイルを開くことができます。

正規表現検索

正規表現でファイルを検索する際に使用します。
このモード中は、モード表示横にregexと表示されます。

例) 拡張子 js で絞り込み

1
**.js$

詳しくは、:help ctrlp-input-formatsに詳しく書かれています。

バッファ切り替えモード

バッファ切り替えは、開いている裏バッファの切り替えを行うことができます。
モード表示はbuffersとなります。

上記基本操作と同様にファイルを開く際のオプションを指定することができます。

MRUモード

Vim界隈でよく出てくるMRUというキーワードですが、これはMost Recent Usedの略で最近開いたファイルのことを指します。 CtrlPMRUも管理してくれます。
モード表示はMRUです。

ファイルを開く際のキーマッピング

  • ファイルを開く enter↵
  • メニューを使用してファイルを開く Ctrl + o
  • タブで開く Ctrl + t
  • 水平分割で開く Ctrl + s
  • 垂直分割で開く Ctrl + v

本Blogでも紹介しているNerdTreeのキーマッピングと多少異なるので注意してください。


おすすめ設定とその説明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
" キャッシュディレクトリ
let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'
" キャッシュを終了時に削除しない
let g:ctrlp_clear_cache_on_exit = 0
" 遅延再描画
let g:ctrlp_lazy_update = 1
" ルートパスと認識させるためのファイル
let g:ctrlp_root_markers = ['Gemfile', 'pom.xml', 'build.xml']
" CtrlPのウィンドウ最大高さ
let g:ctrlp_max_height = 20
" 無視するディレクトリ
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn)$',
\ 'file': '\v\.(exe|so|dll)$',
\ 'link': 'some_bad_symbolic_links',
\ }

キャッシュと描画遅延について

CtrlPを起動すると、ファイルの検索を毎回行う動作となっています。
プロジェクトが小さいなら全く気にならないんですが、大きくなるとCtrlPの起動に1秒掛かってしまうこともありますが、
それを解決するのが g:ctrlp_cache_dirg:ctrlp_clear_cache_on_exitです。

CtrlPを起動すると初回のみ検索を行い、次回以降はそのキャッシュの内容を使用することになります。
じゃあキャッシュの更新はどうすんのって思った方は安心してください。

キャッシュの更新は、デフォルトで F5 にマッピングされています。
CtrlPを起動して F5 を押下することで、キャッシュの更新が行われます。

また、表示を高速化するためにctrlp_lazy_updateを設定しましょう。
Vimの設定のset lazyredrawと同様です。

ルートマーカーについて

IDE的にVimを使用する人にとっては、ファイルを縦断しながらコードを書く人が多いと思いますが
CtrlPプロジェクトルートとして認識するための情報を与えるのがこの設定です。

例えば、RailsならGemfileや、Javaならbuild.xmlだったり、
プロジェクトルートにのみ存在する何かを設定すると、CtrlPは認識したルート配下を
再帰的に検索してくれるようになります。

お好みで

CtrlPの表示サイズはg:ctrlp_max_heightで設定できます。
自分は20くらいが調度良いサイズでした。

他にも様々なオプションがあったり、拡張機能が使用できます。
快適なVimmerライフを!