Vim と ctags で Scala の関数一覧を tagbar を使って表示する

ctags を使ってタグファイルを作成すると、
定義<->利用箇所とジャンプできて便利ですよね。
↓こんなことがやりたい。
f:id:nishikawasasaki:20111226143817p:image:w360
これを ScalaVim で書いている状況でやりたいと思います。

まずは ctags の設定

ctags そのままでは Scala の書き方がわかりませんので、

~/.ctags

に正規表現で Scala の表記パターンを追加します。
もし上記ファイルがない場合はファイルを作成して内容を追加してください。
この方の gist で内容はほぼ OK なはずです。

ctags file ― Gist : https://gist.github.com/1277336

Scala の場合、定義パターンの前に lazy など色々つくので上の gist では用意してありますが
不要なものもありますので気になる方は修正してください。


なお、 ctags は新しいもの(-R の使えるもの・Exuberant Ctags)を使ってくださいね。
特に Mac に最初から入っている ctags は古いので注意です。


これで ctags が Scala 用のタグファイルを作ってくれるようになりましたので、
試しに scalaz のタグを作ってみましょう。

cd hogehoge/scalaz/
ctags -R .

きちんとタグファイルができた場合、
コマンドを実行したディレクトリに tags という名前のファイルができています。

tagbar

以上の作業で Vim を利用して Scala のソースを開くとタグジャンプなどの機能を使えますが、
どうせならタグ(パッケージやクラス、メソッド)の一覧を表示したいものです。
Scala 以外にもタグ一覧表示に taglist.vim を少しいじって使っていましたが、
tagbar に入れなおしてみました。

majutsushi/tagbar - GitHub : https://github.com/majutsushi/tagbar

f:id:nishikawasasaki:20111226143817p:image:w360
タグの種類に応じて折りたたみが可能でキレイです。


tagbar 標準では Scala のタグに対応していませんので Scala 用の設定を追加します。
こちらの説明にあるように、

Support for additional filetypes - GitHub :
https://github.com/majutsushi/tagbar/wiki/Support-for-additional-filetypes

.vimrc へ Scala 用の設定を追加します。


ctags の場所を明示的に指定するには

let g:tagbar_ctags_bin = '/usr/local/bin/ctags'

としてやります。
Mac と Win で ctags の場所が異なる場合、

if has("mac")
	let g:tagbar_ctags_bin = '/hogehoge/ctags'
endif
if has("win32")
	let g:tagbar_ctags_bin = 'C:\hogehoge\ctags.exe'
endif

のように切り分けると良いでしょうか。

完成

以上で完成です。
unite-outline を に当てているため似たようなキーとして

nnoremap <silent> <leader>o :TagbarToggle<CR>

を設定しています。
一方 unite-outline は

nnoremap <silent> <C-o> :<C-u>Unite -auto-preview outline<CR>

としてプレビュー表示もしているのでなんとなく気分で使い分けています。
f:id:nishikawasasaki:20111226145906p:image:w360