さて、Vim導入メモを書いてから、早いものでもう一ヶ月経ってしまいました。

ようやく使い方にもそこそこ慣れてきたので、今回はVim導入の一番の目的でもあったRails開発についてまとめてみたいと思います。

Rails開発に役立つVimスクリプト(必須)

Vim/Ruby

これはVimでRubyを扱う際の最も基本的な拡張機能と思います。

.rb(ruby)と.rhtml(eruby)のファイルでシンタックスハイライトが有効になるほか、オムニ補完(<C-X><C-O>で表示される自動補完)も使えるようになります。



omni補完 - モデル内で「has」と入力して補完したところ

オムニ補完を実行する<C-X><C-O>は入力が面倒なので、予めキーマップを変更しておくのがお勧め。

"<C-Space>でomni補完 imap <C-Space> <C-x><C-o>

Vim/Ruby自体はKaoriya版のバイナリに同梱されているので、環境にRubyがインストールされていればそのまま使えます。

また、グローバル変数のオプションを設定することで上の画像のようにRailsのメソッド名にも対応してくれます。

"Rubyのオムニ補完を設定(ft-ruby-omni) let g:rubycomplete_buffer_loading = 1 let g:rubycomplete_classes_in_global = 1 let g:rubycomplete_rails = 1

(＊2007-08-27追記：buffer_loadingとclasses_in_globalのオプションを書いていなかったので追加)

参考情報

rails.vim

Rails開発の中心となるのはこちら。

かなり盛りだくさんな機能が備わっていますが、詳しくはドキュメントを読んでいただくとしてここでは主なものだけ紹介します。

Railsコマンドの実行

通常コマンドプロンプトから実行するRailsコマンドを、Vimの中から実行できるようになります。

よく使うコマンドはこんな感じ。

:Rails {directory} →railsプロジェクトを作成 :Rake {target} →db:migrateなど、rakeを実行 :Rgenerate {options} →controller,modelなどを作成 :Rserver {options} →サーバを起動

オプションはコマンドラインの場合と同じように指定できます。

ファイル間の移動

Rails開発において他のIDEと比べたとき、Vimを使う一番のメリットになりそうなのがこのファイル間の移動機能。

まず、カーソル下のファイルへ移動する「gf」コマンドがrailsの文脈を考慮して動作してくれます。

gfの使用例はこんな感じ。(*はカーソルのポジションを表す)

Boo*k.find(:all)

コントローラにてモデル名を選択→gf app/models/book.rb

該当モデルファイルが開く

また、開いているファイルに応じて「[f」と「]f」を使って別ファイルへジャンプすることができます。

[fで「もうひとつの(代替)」ファイルへ移動

]fで「関連する」ファイルへ移動

例えば「]f」コマンドだけでコントローラファイルとビューの相互移動ができるといった具合。

詳しいファイルごとの対応についてはヘルプドキュメントやチートシート(参考情報のところにリンクを載せておきます)で確認してください。

略語補完(単語の補完)

入力モード時、特定の短縮名を入力後に<c-]>を入力することで文脈に応じてキーワードが展開されます。

ビューのform_tagを書いているとき:a<c-]>と入力すると「:action =>」に変換、という感じ。

短縮名は「:Rabbrev」で現在のファイルタイプに応じた一覧が表示されます。

rails.vimの設定

rails.vimにはいくつかのオプション設定が存在します。

私の現在の設定は以下の通り。

"rails.vimの設定(rails.vim) let g:rails_level = 4 let g:rails_devalut_database = 'mysql'

参考情報

Rails開発に役立つvimスクリプト(あると便利)

project.vim

この拡張スクリプトを使うと、「:Project」で画面左にプロジェクトごとのディレクトリツリーを表示できるようになります。



project.vim

通常project.vim単体では表示するプロジェクトの定義を手動(ウィザード)で行う必要がありますが、Rails.vimにはproject.vimとの連係機能があり「:Rproject」コマンドだけで自動的に現在開いているRailsプロジェクトをディレクトリツリーへ追加できます。

また細かいことですが、このproject.vimで表示したディレクトリツリーは、右のコードを表示しているウィンドウで「<C-W>o」としても消えずに残ってくれるのがありがたいところです。

参考情報

matchit.vim

matchit.vimは、対応する括弧へ移動する「%」コマンドを拡張してくれます。

vim/rubyが導入されている場合、これによって「module」「class」「def」に対応する「end」にジャンプできるようになります。

surround.vim

標準では囲い込みの全体(a)と中身(i)しか指定できないテキストオブジェクトの機能を、外側(s)の指定にも使えるようにしてくれます。

具体的には、vで範囲選択したあと「s”」とすることで、文字を”で囲むことなどが可能になります。(同じく「ds”」なら外側の囲い込みを削除)

rails.vimが導入されている場合、この機能がERBタグに対応するよう拡張され、ビュー内で「=」で囲むよう指定すると自動的に「< %= %>」として処理されます。

例えば「yss=」とすれば、カレント行を「< %=」と「%>」で囲むことができます。

参考情報

surround.vimの使い方については、以下のページが参考になります。

snippetsEmu.vim

TextMateライクなスニペット機能を提供してくれるものです。

def<Tab>と入力するとendが自動補完され、カーソルはメソッド名の入力位置に移動します。

参考情報

snippetsEmu.vimの使い方については、以下のページが参考になります。

NERD_commenter.vim

コメント処理のためのVimスクリプトはいくつか存在するようですが、現在はこれが最強っぽいです。

,c<Space>などのコマンドで、ファイルタイプに応じたコメントアウトを行うことができます。

コメントのトグルを使いやすいようマッピングし直しておくと便利。

"<Leader>xでコメントをトグル(NERD_commenter.vim) map <Leader>x ,c<space> "未対応ファイルタイプのエラーメッセージを表示しない let NERDShutUp=1

参考情報

vimrcの設定

その他RubyとRails開発のために設定しているvimrcの設定を載せておきます。

以下のautocomandの設定は、スマートな書き方をよく知らないのでちょっと汚いですがとりあえずこれで問題なく動いています。

"タブ幅をリセット au BufNewFile,BufRead * set tabstop=4 shiftwidth=4 ".rhtmlと.rbと.ymlでタブ幅を変更 au BufNewFile,BufRead *.rhtml set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2 au BufNewFile,BufRead *.yml set tabstop=2 shiftwidth=2 "Rails関連ファイルで文字コードをUFT-8に設定 au User Rails* set fenc=utf-8

参考情報

リファレンスの参照

RadRailsにはRailsリファレンスのインクリメンタル検索機能がありますが、Vimでは現在残念ながらこれに相当する機能がありません。

しかし、以下のサイトでリファレンスをHTMLヘルプ化されたものが公開されているので、これを別途使えばキーワードによる検索が可能です。

開発時にはVimと併せて開いておくとよいでしょう。



HTMLヘルプ

ちなみに、Ruby自体のリファレンスはVimから検索するためのスクリプトが存在するようです。(私はまだ使ってみていません)

まとめ

以上、VimでのRails開発について直接役立ちそうなものを書き出してみました。

もっとも、Vimにはここで紹介しきれなかった便利な機能や拡張スクリプトがまだまだ存在します。

実際の開発作業ではそれらも組み合わせて使うことになるでしょう。

Vimは使い方に慣れるまでには時間がかかりますが、高いカスタマイズ性や気の利いた拡張機能は大きな魅力です。

是非このような優れたツールを使いこなして効率的にコーディングを進めてゆきたいものです。

参考情報

WEB+DB PRESS Vol.39

VimをRailsの開発環境として使うことに興味を持ったのはこの雑誌の「Ruby on Rails本格活用：筆者の開発環境」という記事がきっかけでした。この記事ではVimとEmacsでそれぞれRails開発を行うための便利な機能について紹介されています。今回の記事を書くにあたってもかなり参考にさせていただきました。



