projectionist.vim とは
https://github.com/tpope/vim-projectionist
http://www.vim.org/scripts/script.php?script_id=4989
rails.vimの:Aとか:Exxxとかの機能を、railsに関係なく、jsonで記述したルールに従って使えるようになっているプラグイン。 rails.vimと共存できない。
railsで使うとどのへんが嬉しいのか
プロジェクト固有に導入したものに対して:Aや:Exxxを使えるようにできる。例えば
- active_decoratorを使っていれば:Edecoratorができる
- active_adminを使っていれば、app/admin/hoge.rbから:Aでspec/features/admin/hoge_spec.rbを開ける
逆にどのへんが悲しいのか
rails.vimを使うのをやめないといけないので、:Emodelなどrails.vimでデフォルトなものの定義も書かないといけない。
https://github.com/tpope/vim-rails/issues/326
何をすれば使えるのか
1. rails.vimを使わないようにする
" Bundle 'tpope/vim-rails'
2. projectionist.vimを使うようにする
Bundle 'tpope/vim-projectionist'
3. .projection.jsonを記述する
プロジェクトのルート直下に置く。
{"app/admin/*.rb":{"alternate":["spec/features/admin/{}_spec.rb","spec/features/admin/{plural}_spec.rb"],"type":"admin"},"app/controllers/*_controller.rb":{"alternate":"spec/controllers/{}_controller_spec.rb","type":"controller"},"app/decorators/*_decorator.rb":{"alternate":"spec/decorators/{}_decorator_spec.rb","type":"decorator"},"app/helpers/*_helper.rb":{"alternate":"spec/helpers/{}_helper_spec.rb","type":"helper"},"app/mailers/*_mailer.rb":{"alternate":"spec/mailers/{}_mailer_spec.rb","type":"mailer"},"app/models/*.rb":{"alternate":"spec/models/{}_spec.rb","type":"model"},"app/workers/*.rb":{"alternate":"spec/workers/{}_spec.rb","type":"worker"}}
alternate項目を書けば:A系コマンドが、type項目を書けば:E系コマンドが使えるようになる。
:Aコマンドが一方通行なので、逆もやりたかったらそのための定義が必要っぽい。
詳細は :help projectionist に。
projectionという考え方自体はvim関係ないよねという話
https://github.com/tpope/vim-projectionist#faq
Why not a clearer filename like
.vim_projections.json
?I don't see any reason to tie the concept of projections to Vim in particular.
While some features (in particular navigation commands) are idiosyncratic to
the way Vim works, others could make sense in a wide variety of editors.
関係ないので、guard-rspecの設定も.projection.jsonを読ませるようにしてみたりしたいなーと思っている。