vimでirbっぽいことをするプラグイン

irbのつかいにくさにうんざりした(あとwindowsではwirbleのカラーリングが機能しない)ので作った。会社で。
Vim上でRubyを動かしたい。 - ボクノスをもとに改造した。tanakaBox++。
SICPの回答でもおせわになってます。

使い方:~/vimfiles/after/ftplugin/ruby.vimあたりに保存、rubyファイル開く
Ctrl+Shift+CRでサイレントに実行(オリジナルのC-R相当)。
C-CRだと、式を評価した結果をinspectしたものが挿入される。irbっぽい。


ヒアドキュメントがない言語を使うと泣きそうになりますね。いやコードがある程度長くなったら外部に分離すればいいだけか……


そのうちCodeReposにupしようと思う(誰か暇だったらやっといていいですよ)

関連ページ

ソース

{pull:file path=~/vimfiles/after/ftplugin/ruby.vim last_sync=2008.04.25,19:33}
"original: http://d.hatena.ne.jp/tanakaBox/20070827/1188149288
nmap <buffer> <C-CR> :call <SID>Eval(function("<SID>YankNormal"),0)<CR>o<ESC>D
nmap <buffer> <C-S-CR> :call <SID>Eval(function("<SID>YankNormal"),1)<CR><CR>
imap <buffer> <C-CR> <ESC>:call <SID>Eval(function("<SID>YankNormal"),0)<CR>o<ESC>Di
imap <buffer> <C-S-CR> <ESC>:call <SID>Eval(function("<SID>YankNormal"),1)<CR>o<ESC>Di
vmap <buffer> <C-CR> :call <SID>EvalVisual(0)<CR>
vmap <buffer> <C-S-CR> :call <SID>EvalVisual(1)<CR>

execute 'ruby __vim_bind = binding'

function! s:Eval(Yank,silent)
  let s:saved_reg = @"
  call a:Yank()
  let code=@"
  execute 'ruby begin;'.
			  \'result=eval(%q(' . code . '), __vim_bind).inspect;'.
			  \'if '.a:silent.'==0;'.
			  \'cur=VIM::Window.current.cursor[0];'.
			  \'VIM::Buffer.current.append(cur," => "+result);cur+=1;'.
			  \'VIM::Buffer.current.append(cur,"");'.
			  \'VIM::Window.current.cursor=[cur,0];'.
			  \'else;'.
			  \'puts("result: "+result[0...128]+((result.size<=128)?"":"..."));'.
			  \'end;'.
			  \' rescue ScriptError, StandardError => e; puts e.message;end;'
  let @" = s:saved_reg
endfunc

function! s:EvalVisual(silent) range
  call <SID>Eval(function("<SID>YankVisual"),a:silent)
endfunc

function! s:YankVisual()
  silent normal `<v`>y
endfunc

function! s:YankNormal()
  silent normal yy
endfunc
{/pull}

sync.vim、内部タグを除去するモードつけなきゃなー。