:QuickRun を codepad で実行する
この記事は Vim Advent Calendar 2012 353日目の記事になります。
Vim Advent Calendar 2013 の募集も開始しました。
興味のある方はぜひご参加下さい。
ブラウザからコードを実行する事ができる codepad というサービスがあります。
これを利用すればローカルに実行環境がなくてもブラウザからコードを実行する事ができます。
また mattn さんの作成された codepad-vim を使用すれば Vim から codepad を利用する事ができます。
" バッファのコードを codepad で実行し、結果を表示する
CodePadRun
で、これを利用して、 quickrun.vim から codepad で実行するようなモジュールを書いてみました。
[ソース]
" codepad で実行する quickrun-runner を定義 let s:runner = {} let s:runner.name = "codepad" let s:runner.kind = "runner" function! s:runner.run(commands, input, session) let def_region = { 'first': [1, 1, 0], 'last': [line("$"), 1, 0] } let line1 = get(a:session.config, "region", def_region).first[0] let line2 = get(a:session.config, "region", def_region).last[0] redir => result call CodePadRun(line1, line2) redir END let error = 0 let error_pattern = '<a href="#line-\(\d\+\)">Line \1</a>' if result =~ error_pattern let error = 1 let filename = substitute(a:session.config.srcfile, '\\', '/', "g") let result = substitute(result, error_pattern, filename . ':\1', "g") endif call a:session.output(result) return error endfunction call quickrun#module#register(s:runner, 1) silent! unlet s:runner " runner に codepad を設定 " コマンドがないと quickrun.vim 側でエラーになるので " ダミーを設定しておく let g:quickrun_config = { \ "_" : { \ "runner" : "codepad", \ "command" : "dummy", \ } \}
これで各実行環境がなくても codepad 経由でコードを :QuickRun する事ができます。
(本当は非同期で実行したかったんだけどコードがちょっと複雑になりそうなのでやめた