最終更新(2013-01-13)
記事を書いてから時間が経って情報が劣化したので、最新情報に更新しました。
なお、qiitaが更新履歴に対応したという噂(本当?)を聞いたので、本文は直接更新しています。
変更内容
- vimrcの設定の変更
- NeoBundleの設定を最新の構文に変更
- 全体的に最適化した設定に変更
- 間違った説明文を修正
- 新しいプラグインの追加
- unite-reek
- unite-rails_best_practices
- vim-ruby
- alpaca_complete
- プラグインの変更
- vim-ref-riを本家に変更
- vim-rsense -> neocomplcache-rsenseに変更
- neocomplcache-snippets-complete -> neosnippet に変更
- rails.vimの削除
- dbext 使わないから削除. rubyistはPryを使え、と天から声が聞こえます。
** 2013-01-13 全ての設定をまとめたものが こちら になります。 **
関西でもruby案件がチラホラ出て来ていると聞きました。嬉しい限りの今日この頃です。
会社の情報共有を兼ねて、使い方から導入方法まで。
Railsでの開発スピードをぐんぐんあげるプラグイン達です。
紹介するプラグインは以下の通りです。
vimでRuby / RoR を書くパフォーマンスを最高にしましょう!
- neocomplcache
- neosnippet
- neocomplcache-rsense
- tcomment_vim
- surround.vim
- vim-rails
- vim-endwise
- ruby-matchit
- unite.vim
- unite-rake
- unite-rails
- vim-ref
- vim-ref-ri
- vim-rspec
- dbext
インストール
vimのプラグイン管理にはNeoBundleを使います。
使い方は以下を参照。
NeoBundleの導入
下記のコードをNeoBundleでインストールしてください
Railsに関するプラグインの遅延読み込みのためにちょっと面倒なことをしています。
うまく動かないっていう人は、NeoBundleLazyをNeoBundleに書き換えて使って下さい
" neobundle"{{{
" コマンドを伴うやつの遅延読み込み
"bundle"{{{
" その他 {{{
NeoBundle 'Shougo/vimproc', {
\ 'build' : {
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',
\ },
\ }
NeoBundleLazy 'taichouchou2/vim-endwise.git', {
\ 'autoload' : {
\ 'insert' : 1,
\ } }
" }}}
" 補完 {{{
NeoBundleLazy 'Shougo/neocomplcache', {
\ 'autoload' : {
\ 'insert' : 1,
\ }}
NeoBundleLazy 'Shougo/neosnippet', {
\ 'autoload' : {
\ 'insert' : 1,
\ }}
NeoBundle 'Shougo/neocomplcache-rsense', {
\ 'depends': 'Shougo/neocomplcache',
\ 'autoload': { 'filetypes': 'ruby' }}
NeoBundleLazy 'taichouchou2/rsense-0.3', {
\ 'build' : {
\ 'mac': 'ruby etc/config.rb > ~/.rsense',
\ 'unix': 'ruby etc/config.rb > ~/.rsense',
\ } }
" }}}
" 便利 {{{
" 範囲指定のコマンドが使えないので、tcommentのLazy化はNeoBundleのアップデートを待ちましょう...
NeoBundle 'tomtom/tcomment_vim'
NeoBundleLazy 'tpope/vim-surround', {
\ 'autoload' : {
\ 'mappings' : [
\ ['nx', '<Plug>Dsurround'], ['nx', '<Plug>Csurround'],
\ ['nx', '<Plug>Ysurround'], ['nx', '<Plug>YSurround'],
\ ['nx', '<Plug>Yssurround'], ['nx', '<Plug>YSsurround'],
\ ['nx', '<Plug>YSsurround'], ['vx', '<Plug>VgSurround'],
\ ['vx', '<Plug>VSurround']
\ ]}}
" }}}
" ruby / railsサポート {{{
NeoBundle 'tpope/vim-rails'
NeoBundleLazy 'ujihisa/unite-rake', {
\ 'depends' : 'Shougo/unite.vim' }
NeoBundleLazy 'basyura/unite-rails', {
\ 'depends' : 'Shjkougo/unite.vim' }
NeoBundleLazy 'taichouchou2/unite-rails_best_practices', {
\ 'depends' : 'Shougo/unite.vim',
\ 'build' : {
\ 'mac': 'gem install rails_best_practices',
\ 'unix': 'gem install rails_best_practices',
\ }
\ }
NeoBundleLazy 'taichouchou2/unite-reek', {
\ 'build' : {
\ 'mac': 'gem install reek',
\ 'unix': 'gem install reek',
\ },
\ 'autoload': { 'filetypes': ['ruby', 'eruby', 'haml'] },
\ 'depends' : 'Shougo/unite.vim' }
NeoBundleLazy 'taichouchou2/alpaca_complete', {
\ 'depends' : 'tpope/vim-rails',
\ 'build' : {
\ 'mac': 'gem install alpaca_complete',
\ 'unix': 'gem install alpaca_complete',
\ }
\ }
let s:bundle_rails = 'unite-rails unite-rails_best_practices unite-rake alpaca_complete'
function! s:bundleLoadDepends(bundle_names) "{{{
" bundleの読み込み
execute 'NeoBundleSource '.a:bundle_names
au! RailsLazyPlugins
endfunction"}}}
aug RailsLazyPlugins
au User Rails call <SID>bundleLoadDepends(s:bundle_rails)
aug END
" reference環境
NeoBundleLazy 'vim-ruby/vim-ruby', {
\ 'autoload' : { 'filetypes': ['ruby', 'eruby', 'haml'] } }
NeoBundleLazy 'taka84u9/vim-ref-ri', {
\ 'depends': ['Shougo/unite.vim', 'thinca/vim-ref'],
\ 'autoload': { 'filetypes': ['ruby', 'eruby', 'haml'] } }
NeoBundleLazy 'skwp/vim-rspec', {
\ 'autoload': { 'filetypes': ['ruby', 'eruby', 'haml'] } }
NeoBundleLazy 'ruby-matchit', {
\ 'autoload' : { 'filetypes': ['ruby', 'eruby', 'haml'] } }
" }}}
" }}}
"}}}
vim-endwise
if...endやdef...endなど、対になる文字を自動で書き出してくれるプラグインです。
ifまで押して、<CR>すると自動でif...endまで書き出してくれます。
ruby以外にも、幾つかの言語で対応しているのでオススメのプラグインです。
ruby-matchit
vimには、対になる文字の上で%を押す事で、対応する()や{}を移動する機能が備わっています。
ruby-matchitは、rubyでよく使うdef...endなども%で移動出来るようにカスタマイズします。
あってもいいけど、なくても良いかな。というような機能ですが。
設定は不要です
補完環境を設定。
neocomplcache / neosnippet / neocomplcache-rsense
今回一番オススメするプラグインです。
neocomplcacheはShougoさんが作られた有名な補完プラグインですが、snippetsやrsenseと組み合わせると素晴らしいパフォーマンスを出すことは以外と知られていません。
neosnippet
snippets補完は、入力中の文字に対して予め容易された一連の処理を展開する補完です。
例えば、classと入力して、補完用のキーバーインド(私は<C-F>にしています)を入力すれば、snippetsが展開されます。
初め、$1のところにカーソルがあり、もう一度入力すると、$2のところにカーソルが移動します。
これは、一度使ってみないとなかなかありがたみが分からないかも知れません。
class $1
$2
end
snippets展開の<C-F>は、<C-K>などに変更してもいいかも知れません。
rsense
Rsense はRubyに特化した高度なomni補完です。
Youtube を見れば、この素晴らしさが分かるのでは無いでしょうか。
omni補完関数とは、自前(あるいはプラグイン)で用意した関数で、文章を読み取りメソッドなどを候補として書き出す関数です。
よく出回っているneocomplcacheの設定をそのまま使っている人も多いかと思います。しかし、rubyのomni補完rubycomplete#Completeという関数よりも、こちらの補完関数の方が頭の良い補完をしてくれます。
2013-01-13更新
vim-rsenseというプラグインをオススメしていましたが、
Shougoさんのneocomplcache-rsenseの方が優れているのでそちらがオススメです。
あとは、Youtubeの通りに補完が展開されれば完了です。
neocomplcacheの設定によっては、その通りに表示されない可能性があります。その場合は、一度設定の変数を出来る限りデフォルトに直して試してみてください。
comment環境を整理
tcomment_vim, surround.vim
tcooment.vimは、rubyでいう#、erubyの<%# >、<%= >を簡単に入力出来ます。
設定
また、surround.vimはerubyファイル内にて操作をサポートします。
ヴィジュアルモードで選択後、以下の操作で囲むことが出来ます。
s# => <%# >
s= => <%= >
設定は こちら
vim-rails, rails.vim
railsを使うときに、移動をスマートにしたり、vimからコマンドを実行する事が出来ます。
私がvimでRailsを書く理由は、このプラグインによってコードが何よりも書きやすいからに他なりません。
:Rでview - controllerを移動したり、:Aでテストコードとを行き来出来ます。
unite, unite-rake, unite-rails
:Unite rakeで、Unite上にrakeコマンドを一覧表示させることが出来ます。
個人的に、unite-rakeはとても便利だと思っています。
自前で様々なRakeファイルを作って、ルートディレクトリに設置しておけばvim上から様々な処理を行う事が出来ます。
rubyistには結構可能性を秘めている使い方では無いでしょうか?
また:Unite rails/<Tab>で、Unite上にrailsの何か(tab後に選択、viewなど)を一覧表示させる事が出来ます。
これをキーマップに指定して、vim-railsと組み合わせることでRails内の移動を最速で行う事が出来ます。
db/やrspecやroutes.rbなども一瞬。ヤダ、素敵。
オススメの設定は こちら
vim-ref, vim-ref-ri
vim-refはvim上からリファレンスを引く事が出来る便利なプラグインです。
taka84u9さん、thincaさんに感謝。
Uniteと組み合わせて使うことも出来ます
Ref refe ArrayでArrayのメソッド一覧、詳細を見る事や
Ref ri link_toでrails内のlink_toのリファレンスを見ることが出来るようになります。
ただし、~/.gemrcにて--no-riなどと設定しているとRef riで引けるリファレンスは無くなってしまうので注意を。
こちらも、若干設定がややこしいです。
- w3mやlynxをインストールする
これらは、cuiブラウザです。リファレンスの閲覧に必要なのでhomebrewなどでインストールしましょう。
brew install w3m or brew install lynx
- gemで、refeやriをインストールします
gem ins refe
gem ins ri こちらは、既に入っているかと思いますが、、
- リファレンスをローカルに保存する
1.9.3あたりをDLすればいいのではないでしょうか。
忘れましたが、refeからも生成出来たような気がします。。
リファレンスを保存する
- ( vimの設定を追加する )
設定が無くても使えますが、あればより使いやすくなります。
refeとriのPATHは各々書き換えてください。
その他
vim-rspec
rspecのit...やdescribeにシンタックスを追加します。
設定は不要です。
ctags
ctagsは、タグジャンプ(IDEで使ったことはあるかと思います)をするための、tagsという情報を集めるツールです。MacVimの中に格納されています。
ctags -Rで、プロジェクト内のtagsを生成して、:set tags+=tags;**/tagsを実行すれば、vimでもタグジャンプを実行する事が出来ます。
ただ、このままではプロジェクト内のtagしか飛ぶ事が出来ません。
gemでインストールしたものや、ruby自体(StringやFileなど)のコードにも飛べたら便利ですね。
下記のようなコマンドを実行することで、それらのtagsを作る事が出来ます。
pathは各々書き換えてください。rubyのディレクトリと、gemのディレクトリのtagsを生成しています。
alias rtags='ctags -R -a --sort=yes --exclude=*.js --exclude=*.h --exclude=log --exclude=*.yml --exclude=.git --langmap=RUBY:.rb ~/.rbenv/versions/1.9.3-p125/lib/ruby/1.9.1'
alias gtags='ctags -R -a --sort=yes --exclude=*.js --exclude=*.exp --exclude=*.am --exclude=*.in --exclude=*.m4--exclude=*.o --exclude=*.h --exclude=log --exclude=*.yml --exclude=.git --langmap=RUBY:.rb ~/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems'
~/tagsという名前以外で保存してください。(全ての言語で読み込まれてしまうからです)
vimの設定はこちらです
if filereadable(expand('~/rtags'))
au FileType ruby,eruby setl tags+=~/rtags,~/gtags
else
requireしたgemの中身をパッと確認できるので、優れたコードを読めるし、メソッドの理解も進みます。
ruby力がぐんぐんあがりますね。
その他のプラグイン
1.unite-ruby-require.vim
require 対象の補完をする unite.vim ソース.
2.neco-ruby-keyword-args
neocomplcache で Ruby 2.0 のキーワード引数を補完
3.vim-textobj-ruby
Ruby のブロックをテキストオブジェクト化
Vim で Ruby を書くためのプラグイン3つ書いた
4.unite-reek
5.unite-rails_best_practices
RubyやRailsのクサいコードをリストアップしてくれます。
リファクタリングに必須。
6.alpaca_complete
railsでI18nを使用する場合、長いlocales文字列を補完してくれます。便利。
vimmerのためのRailsの補完 (locales編) & リファクタリング
まとめ
rubyが普及して、関西でもRuby案件がどんどん増えていけばいいなぁと思っています。
東京では普及していると聞きますが、如何でしょうか。一度東京の方に伺いたいものです。
RoRをサポートしているサーバーといえば、herokuが素晴らしいです。しかし、英語なので抵抗がある人がまだまだ多いようです。
日本でも sqale のような素晴らしいサービス出てきましたし、これからどんどん普及していくのではないでしょうか。早く微妙な言語とオサラバしたいものです。
皆様と共に頑張っていきたいですね。
今回のvimのRuby環境のまとめが一助になればと思います。












大変参考になりました!
一点だけ。
NeoBundle 'taq/vim-rspec'と、ありますが、taq/vim-rspecのREADMEを見ると、
現在の公式のvim-rspecは下記のforkっぽいですね。
https://github.com/skwp/vim-rspec
「Please don't use the code here. 」と書かれていたので念の為。
neocomplcache-snippets-complete
も
neosnippet 使ってーーーーーーー(^−^)って出るようになりましたね。
u can check the revisions here :) http://qiita.com/items/ab2ad83ddbaf2f6ce7fb/revisions