rails.vim の :A
(関連ファイルを開く)とか :AV
(関連ファイルを画面分割して開く)とか、便利ですよね。しかし、これらはデフォルトでは model や controller など最初からあるものでしか使えません。
7 Patterns to Refactor Fat ActiveRecord Modelsにあるような app/services
などを導入した時は、service でも同じように :AV
とかを使いたいです。
rails.vim では、このファイル間の関連を projections と呼んでいるようです。projections に自分で追加するには、いくつか方法があります。
.vimrc
.vimrc
などで g:rails_projections
を設定します。
.vimrc
let g:rails_projection = {
\ "app/services/*.rb": {
\ "command": "service",
\ "test": "spec/services/%s_spec.rb"
\ }
\ }
これで :Rservice
で service のファイルを開いたり、:Rservice!
で作成したり、:A
などで spec ファイルを開いたりできるようになります。もうちょっといろいろ設定できるので、詳細は :help rails-projections
を参照してください。
config/projections.json
しかし、これだとチームで設定を共有できませんよね。また、プロジェクトによってディレクトリ構造が違う場合もあるかもしれません。そういう場合は、プロジェクト毎に config/projections.rb
に設定を記入します。
config/projections.rb
{"app/services/*.rb":{"command":"service","test":"spec/services/%s_spec.rb"}}
Rails 以外では
なお、Rails 以外でも同じようなことをするための projections.vimというプラグインもあるようです。使ったことはありませんが、他の言語のプロジェクトで試してみてはいかがでしょう。
参考
- Extending Rails.vim with Custom Commands
:help rails-projections