最近はRailsからちょっと離れ、素のRubyでいくつかライブラリの使い方なんぞを調べています。
Rubyのスクリプトを書くのに以前はRDEを使っていたんですが、せっかくなのでこれもVimに移行してみました。
とはいえデバッグ周りの便利なGUIは一切無いので、あくまでちょっとしたスクリプトを書く程度の使い方になります。
通常の実行方法?
通常Rubyの使用できる環境であれば、以下のコマンドを実行することで現在開いているファイルをRubyで実行できます。
:!ruby %
Windowsのコマンドプロンプトが別窓で立ち上がり、コマンドラインから実行したときと同じような状態で実行結果が表示されます。
スクリプトの終了後、何かキーを押すとコマンドプロンプトのウィンドウが閉じてVimにフォーカスが戻ります。
別にこのまま使っていてもいいのですが、今回はもうちょっとこれを便利にしていきましょう。
シンタックスエラーをQuickFixで一覧表示
スクリプトの実行時にエラーが出る場合、以下の方法でQuickFixにエラー箇所の一覧を表示することができます。(参考ページ:vimでrubyプログラミング S.S.S. blog/ウェブリブログ)
まず「~/vimfiles/after/ftplugin/ruby.vim」に次の一行を追加。
compiler ruby
これでコンパイラプラグインが有効になり、以下のコマンドが使えるようになるよう。
:make -c %
:cw #エラーがある場合のみQuickFixを表示
こんな感じで表示されます。
QuickFixの主なコマンドは以下の通り。
:cn #次のエラー箇所へジャンプ :cp #前のエラー箇所へジャンプ(:cNでも同じ) :ccl #QuickFixを閉じる
長めのスクリプトを扱う際には特に便利かもしれません。(実はあまり検証していないので実用性は計りきれていませんが)
バッファからの実行と結果のプレビュー表示
さて、ようやく本題。
以下のページで大変便利なTipsが紹介されていました。
これを使うとコマンド一発で現在編集中のバッファをそのままRubyで実行し、さらに結果をVim内のプレビューウィンドウに表示できます。
私は以下のようにvimrcに追加しておきました。(キーマップ以外特に変更していません)
"preview interpreter's output(Tip #1244) function! Ruby_eval_vsplit() range if &filetype == "ruby" let src = tempname() let dst = "Ruby Output" " put current buffer's content in a temp file silent execute ": " . a:firstline . "," . a:lastline . "w " . src " open the preview window silent execute ":pedit! " . dst " change to preview window wincmd P " set options setlocal buftype=nofile setlocal noswapfile setlocal syntax=none setlocal bufhidden=delete " replace current buffer with ruby's output silent execute ":%! ruby " . src . " 2>&1 " " change back to the source buffer wincmd p endif endfunction "<F10>でバッファのRubyスクリプトを実行し、結果をプレビュー表示 vmap <silent> <F10> :call Ruby_eval_vsplit()<CR> nmap <silent> <F10> mzggVG<F10>`z map <silent> <S-F10> :pc<CR>
ちなみに、前述のシンタックスチェックは以下のようにマッピングしてあります。
"<M-F10>でRubyスクリプトを保存後シンタックスチェックし、エラーをQuickFixに表示 nmap <silent> <M-F10> :w<CR>:make -c %<CR>:cw<CR>:cfirst<CR>zz nmap <silent> <M-S-F10> :ccl<CR>
実行後にキー入力が必要なスクリプトなどはコマンドプロンプトを使って実行します。
"<C-F10>でRubyスクリプトを保存後コマンドプロンプトから実行 nmap <silent> <C-F10> :w<CR>:!ruby %<CR>
これでなかなか快適になりました。
その他
ついでにそのほかのRuby関連の話題を2つほど。
refe.vim
- 川o・-・)<2nd life - vim で Ruby のリファレンスマニュアルをさくさく検索する - refe.vim
リファレンスの検索はこれが便利。lookupfile.vimは無効にして使っています。
"検索にlookupfile.vimを使用しない(refe.vim) let g:loaded_lookupfile = 0 let g:RefeUseLookupFile = 0
Refeのウィンドウでの主なキー操作は以下の通り。
o:カーソル下の単語からよしなにリファレンスを検索 B:元読んでいたリファレンスに戻る(Back) -:今開いているクラスのリファレンスを読む
EvalSelection.vim
- EvalSelection.vim - evaluate selected code : vim online
これは未使用なんですが、選択範囲のコードをその場で実行し、その結果と置き換えてくれるよう。 - Seasons.NET - You!! いちいちShellたちあげないでEvalしちゃいなよ!! EvalSelection.vim
こちらの記事でスクリーンキャストが公開されています。
追記@2008/04/26
Tanablog: 編集中の Ruby スクリプトをその場で実行する
Linux対応と、FileTypeがrubyのときのみ動作する設定。
Comments»
いつも役に立つエントリありがとうございます。これからも頑張って下さい。
ありがとうございます。こういうコメントがいちばん励みになります。