Vimで快適なRailsライフを

QiitaのRuby Advent Calendar 7/5担当分に書いた記事の転載です.

今日はRubyというかRailsの開発環境の話です. Railsでアプリ開発するときにVimで快適に作業するためのtipsを書きました.

Rails開発に役に立つVimプラグインたち

  • rails.vim : 多分定番プラグインです.対応するモデル・ビュー・コントローラ間を簡単に行き来できます.下で詳しく解説します.便利!

  • The-NERD-tree : Railsとは関係ありませんが,上記rails.vimをインストールした状態で,Railsプロジェクト下のファイルを開いて,:Rtreeコマンドを打つと,サブペイン内にRailsのプロジェクトツリーが表示されます.便利!

NERD-tree

  • dbext.vim: rails.vimと合わせてインストールしておくと,database.ymlの設定を自動で読み込んでくれて,:Select * from users;のようにVimから直接SQLを叩いて結果を見ることができます.便利!

dbext

rails.vimの機能まとめ

上で紹介したrails.vimは非常に多機能で,多分半分も使えてない気がします. この中で普段使っているジャンプ系のコマンドをまとめてみました.

  • :R(model/controller/view) カレンドバッファに対応したModelやControllerにとべます。例えば,UsersControllerを開いているときに,:Rmodelすると/app/models/user.rbにとべます.

  • :R(model/controller/view) name カレントバッファに対応していないファイルを開くために使う.例えば,/app/models/qiita.rbにとびたいときは,:Rmodel qiitaします.ちなみにname部分は補完が効きます.

ちなみにR[command]のcommandにはmodelやcontroller以外に helper/spec/javascript/stylesheet/unittest/plugin/lib/task/layout/migration/schema などを指定できます.

  • :A, :R :A:Rはよく似ています.というか,違うのは確かなのですが,違いがよくわかってます.helpを読むと:Aはalternate fileにとび,:Rはrelated fileにとぶそうです.よくわからない. 手元で適当に打ち込んでみると,基本的に:Aは対応するテストファイルにとびます.一方,:RはカレントバッファがModelならば,db/schema.rbにとびます.カレントバッファがControllerかつカーソル位置がアクションメソッド内あれば,対応するViewにとびます.カーソル位置がアクションメソッドの外であれば,対応するHelperにとびます.

  • :R path config/nvironment.rbなどRailsプロジェクトのルートからの相対パスを指定してファイルを開けます.

  • :RT,:RS,:RV,:RD 上記コマンドのRまたはAの直後にオプションをつけるとファイルを開く方法を指定できます. :RT : 新規タブ :RS : 画面を水平分割 :RV : 画面を垂直分割 :RD : カレントバッファにロード

  • gf カーソル位置のシンボルに応じて定義元にジャンプしてくれます. 例えば,Use*r.find_all_by_idでgfするとapp/models/user.rbを開けます.

カスタム定義

以上はデフォルトで用意されているジャンプ系のコマンドですが,:R[commmand]の[command]部分をユーザが定義することができます. 僕は次のようなコマンドを追加しています. controllers/apiおよびcontrollers/tmpl以下へのジャンプ,:Rconfigコマンド(デフォルトではconfig/routes.rbにとぶ),:Rcontroller => :Rcのようなaliasを定義しています.

autocmd User Rails.controller* Rnavcommand api app/controllers/api -glob=**/* -suffix=_controller.rb
autocmd User Rails.controller* Rnavcommand tmpl app/controllers/tmpl -glob=**/* -suffix=_controller.rb
autocmd User Rails Rnavcommand config config   -glob=*.*  -suffix= -default=routes.rb
autocmd User Rails nmap :<C-u>Rcontroller :<C-u>Rc
autocmd User Rails nmap :<C-u>Rmodel :<C-u>Rm
autocmd User Rails nmap :<C-u>Rview :<C-u>Rv