jump to navigation

VimでRubyスクリプトの実行と結果のプレビュー表示

2007-10-07 00:06 Posted by
nase
in : プログラミング
redstar.jpg

最近はRailsからちょっと離れ、素のRubyでいくつかライブラリの使い方なんぞを調べています。

Rubyのスクリプトを書くのに以前はRDEを使っていたんですが、せっかくなのでこれもVimに移行してみました。

とはいえデバッグ周りの便利なGUIは一切無いので、あくまでちょっとしたスクリプトを書く程度の使い方になります。

通常の実行方法?

通常Rubyの使用できる環境であれば、以下のコマンドを実行することで現在開いているファイルをRubyで実行できます。

:!ruby %

Windowsのコマンドプロンプトが別窓で立ち上がり、コマンドラインから実行したときと同じような状態で実行結果が表示されます。

vim_cp
:!rubyコマンド

スクリプトの終了後、何かキーを押すとコマンドプロンプトのウィンドウが閉じてVimにフォーカスが戻ります。

別にこのまま使っていてもいいのですが、今回はもうちょっとこれを便利にしていきましょう。

シンタックスエラーをQuickFixで一覧表示

スクリプトの実行時にエラーが出る場合、以下の方法でQuickFixにエラー箇所の一覧を表示することができます。(参考ページ:vimでrubyプログラミング S.S.S. blog/ウェブリブログ)

まず「~/vimfiles/after/ftplugin/ruby.vim」に次の一行を追加。

compiler ruby

これでコンパイラプラグインが有効になり、以下のコマンドが使えるようになるよう。

:make -c %
:cw #エラーがある場合のみQuickFixを表示

こんな感じで表示されます。

vim_qf
QuickFix

QuickFixの主なコマンドは以下の通り。

:cn #次のエラー箇所へジャンプ
:cp #前のエラー箇所へジャンプ(:cNでも同じ)
:ccl #QuickFixを閉じる

長めのスクリプトを扱う際には特に便利かもしれません。(実はあまり検証していないので実用性は計りきれていませんが)

バッファからの実行と結果のプレビュー表示

さて、ようやく本題。

以下のページで大変便利なTipsが紹介されていました。

これを使うとコマンド一発で現在編集中のバッファをそのままRubyで実行し、さらに結果をVim内のプレビューウィンドウに表示できます。

vim_pv
実行結果のプレビュー表示

私は以下のように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

"検索にlookupfile.vimを使用しない(refe.vim)
let g:loaded_lookupfile = 0
let g:RefeUseLookupFile = 0

Refeのウィンドウでの主なキー操作は以下の通り。

o:カーソル下の単語からよしなにリファレンスを検索
B:元読んでいたリファレンスに戻る(Back)
-:今開いているクラスのリファレンスを読む

EvalSelection.vim

追記@2008/04/26

Tanablog: 編集中の Ruby スクリプトをその場で実行する
Linux対応と、FileTypeがrubyのときのみ動作する設定。

Comments»

1. ゲスト - 2007-10-8

いつも役に立つエントリありがとうございます。これからも頑張って下さい。

2. nase - 2007-10-8

ありがとうございます。こういうコメントがいちばん励みになります。


*Comments and trackbacks will appear after it is approved by the administrator.