さて、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のオプションを書いていなかったので追加)
参考情報
- vimでrubyプログラミング S.S.S. blog/ウェブリブログ
Vim/Rubyの詳しめな解説が載っています。
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'
参考情報
- 83’s : rails.vimのいい加減な翻訳
rails.vimのドキュメントはかなりのボリュームがあるのですが、こちらでは翻訳された情報が公開されています。ありがたや。 - moroの日記 - rails.vimのチートシート
ファイル間の移動対応や略語の補完など、動作を覚えきれない部分はこちらのチートシートが手元にあると便利です。 - ruby on rails cheat sheet - ilovejackdaniels.com
vimとは関係ありませんが、こちらにはrails自体のチートシートがあります。参考まで。 - 川o・-・)<2nd life - rails.vim まとめ
rails.vimの使いそうな機能の紹介など。 - migration!! - vimでrails開発するときに便利なvimscript
こちらでは3つのスクリプトを紹介。冒頭でリンクされているwikiページもvimによるrails開発のtipsがまとめられており非常に有用。 - migration!! - rails.vimの使い方(導入編)
上の記事の続き。vimでrails開発する際の幸せポイントもまとめられています。
Rails開発に役立つvimスクリプト(あると便利)
project.vim
この拡張スクリプトを使うと、「:Project」で画面左にプロジェクトごとのディレクトリツリーを表示できるようになります。
通常project.vim単体では表示するプロジェクトの定義を手動(ウィザード)で行う必要がありますが、Rails.vimにはproject.vimとの連係機能があり「:Rproject」コマンドだけで自動的に現在開いているRailsプロジェクトをディレクトリツリーへ追加できます。
また細かいことですが、このproject.vimで表示したディレクトリツリーは、右のコードを表示しているウィンドウで「<C-W>o」としても消えずに残ってくれるのがありがたいところです。
参考情報
- 鷹の島:VIM スクリプト巡り
project.vimの簡単な紹介があります。 - monospace blog ≫ vimのprojectを導入してみました
使い方の説明。 - Yet Another KASE’s Page(仮): Vimプラグイン:project
ツリーを表示したスクリーンショットがあります。 - Twisted Mind:Project.vim
スクリーンショットいろいろと説明。 - 符号無し - Dis Communication - project.vimをトグルで使う
トグル表示ができない場合の対処法。(私はトグル表示にZoomWin.vimを使っているので未確認)
matchit.vim
matchit.vimは、対応する括弧へ移動する「%」コマンドを拡張してくれます。
vim/rubyが導入されている場合、これによって「module」「class」「def」に対応する「end」にジャンプできるようになります。
surround.vim
標準では囲い込みの全体(a)と中身(i)しか指定できないテキストオブジェクトの機能を、外側(s)の指定にも使えるようにしてくれます。
具体的には、vで範囲選択したあと「s”」とすることで、文字を”で囲むことなどが可能になります。(同じく「ds”」なら外側の囲い込みを削除)
rails.vimが導入されている場合、この機能がERBタグに対応するよう拡張され、ビュー内で「=」で囲むよう指定すると自動的に「< %= %>」として処理されます。
例えば「yss=」とすれば、カレント行を「< %=」と「%>」で囲むことができます。
参考情報
surround.vimの使い方については、以下のページが参考になります。
- /halt/Snapshot - surround.vim解説
- 川o・-・)<2nd life - vim の text-object をより便利に使えるプラグイン - surround.vim
- vim/plugin/surround - EthnaWiki
snippetsEmu.vim
TextMateライクなスニペット機能を提供してくれるものです。
def<Tab>と入力するとendが自動補完され、カーソルはメソッド名の入力位置に移動します。
参考情報
snippetsEmu.vimの使い方については、以下のページが参考になります。
- ONE×ONE: vimスクリプトsnippetsEmuを試してみた
- RoRの15分ムービーで使われているTextMateのsnippetsもどきなvimプラグインsnippetsEmu
- jijixi’s diary - snippetsEmu.vim というのをお薦めされたので入れてみた
- cooldaemonの備忘録 - snippetsEmu.vim の簡単な使い方
NERD_commenter.vim
コメント処理のためのVimスクリプトはいくつか存在するようですが、現在はこれが最強っぽいです。
,c<Space>などのコマンドで、ファイルタイプに応じたコメントアウトを行うことができます。
コメントのトグルを使いやすいようマッピングし直しておくと便利。
"<Leader>xでコメントをトグル(NERD_commenter.vim)
map <Leader>x ,c<space>
"未対応ファイルタイプのエラーメッセージを表示しない
let NERDShutUp=1
参考情報
- ボクノス - VimのヤバすぎコメントプラグインNERD_comments.vim
NERD_commenter.vimの便利な機能を紹介。
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
参考情報
- moroの日記 - 先日のvimrcのエントリ補足
こちらではディレクトリとファイル名でRailsのファイルを指定されていますが、Rails.vimでは上記の通り「User Rails*」でRails関連ファイあるをまとめて指定できるようです。(細かな条件付の指定方法もドキュメントに載っています)
リファレンスの参照
RadRailsにはRailsリファレンスのインクリメンタル検索機能がありますが、Vimでは現在残念ながらこれに相当する機能がありません。
しかし、以下のサイトでリファレンスをHTMLヘルプ化されたものが公開されているので、これを別途使えばキーワードによる検索が可能です。
開発時にはVimと併せて開いておくとよいでしょう。
ちなみに、Ruby自体のリファレンスはVimから検索するためのスクリプトが存在するようです。(私はまだ使ってみていません)
まとめ
以上、VimでのRails開発について直接役立ちそうなものを書き出してみました。
もっとも、Vimにはここで紹介しきれなかった便利な機能や拡張スクリプトがまだまだ存在します。
実際の開発作業ではそれらも組み合わせて使うことになるでしょう。
Vimは使い方に慣れるまでには時間がかかりますが、高いカスタマイズ性や気の利いた拡張機能は大きな魅力です。
是非このような優れたツールを使いこなして効率的にコーディングを進めてゆきたいものです。
参考情報
VimをRailsの開発環境として使うことに興味を持ったのはこの雑誌の「Ruby on Rails本格活用:筆者の開発環境」という記事がきっかけでした。この記事ではVimとEmacsでそれぞれRails開発を行うための便利な機能について紹介されています。今回の記事を書くにあたってもかなり参考にさせていただきました。
Comments»
vimスクリプトsnippetsEmuを試してみた…
ZeroMemory - RoRの15分ムービーで使われているTextMate… (more…)
[…] で、引っ掛かったのでrails.vim関連の設定。ナレッジエース - Vimを使ったRuby On Rails開発環境の構築で、 […]
[Ruby][Windows] Vim-Kaoriya版でR…
最近、会社の同僚がはまっているVimを使うようになった。Rubyのコードを書いていると、インデントを変更したくなったので調査。 利用しているVimはKaoriya (more…)
[ruby][vim]WindowsでのRuby/Rails…
マシン買い替え時や、職場PCと自宅PCで設定が変わっていると非常に戸惑うのでここに設定を書いておきます。 (more…)
とても参考になりました
ありがとうございます
リンクはらさせてもらいいました><
[…] by admin on 12 月.28, 2008, under Ruby, vim, サーバ CentOSのvimに色々とプラグインを入れていたんですけど、vim-rubyを入れたにもかかわらず、rubyのオムニ補完が出来なくてしょんぼりしていました。 本来であればvim-ruby入れればでぺこっとプルダウンが出てくるはずなのですが、何も起こらず。(理想) […]
[…] On Rails開発環境の構築 – ナレッジエース カテゴリー: Ruby1.9 パーマリンク ← 【WordPressプラグイン】Automatic SEOLinksは「はてな」風、文中キーワード自動リンク Ruby1.9でリファクタリングする!楽天ウェブサービスを使って商品情報を取得しよう『10日でおぼえるPython入門教室』第3日 1限目メモ → […]