最近, ちょいちょいbabelを触ることが増えてきた.
babelはEcma 6th, 7thで書かれたコードをコンパイルして, ブラウザやNode.jsが実行できる形式のJavaScriptコードに変換してくれるツール(transpiler)だ.
一方, 僕はJavaScript開発時, ちょっとしたJavaScriptのスニペットはvim-quickrunを使ってVimから実行している.
しかし, babelでtranspileしないと動作しない.jsのコードを:QuickRun
としても, 当然Node.jsに怒られてしまう.
そこで, babeってからNode.jsで実行するようにQuickRunの設定を書いてみた.
letg:quickrun_config['babel'] = {
\ 'cmdopt': '--stage 1',
\ 'exec': "babel %o %s | node"
\ }
こうしておけば, :QuickRun babel
とすることで, babelでコンパイル→Node.jsで実行ができる.
(勿論, 事前にnpm -g install babel
でbabelをinstallしておくこと)
この段階で殆ど当初の目的は達成できているけど, 実行の度に:QuickRun babel
のようにcommandを叩くのがちょいと欝陶しい.
fileTypeデフォルトの設定であれば, <Leader>r
にQuickRunの実行が割り当てられているが, .jsだからと言って必ずしもbabeる訳でもないので, babel設定をファイルタイプデフォルトにするのも気が引ける.
そこで, b:quickrun_config
を使うことにした.b:quickrun_config
はバッファローカルな設定なので, そのバッファでのみデフォルト挙動を変更することができる.
というわけで, g:quickrun_config
の値をb:quickrun_config
に設定するためのコマンドQuickRunSwitch
を用意した.
- .jsファイルを開く
:QuickRunSwitch babel
でバッファ内におけるデフォルトの typeを変更(一応補完も効くようになってる)<Leader>r
でサックリ実行
.vimrcは下記のようになる.
letg:quickrun_config = {}
function!s:quickrun_switch(...)ifa:{0} && has_key(g:quickrun_config,a:{1})let type_name =a:{1}
echo 'Quickrn switch type: '.type_name
letb:quickrun_config =g:quickrun_config[type_name]
endifendfunctionfunction!s:quickrun_switch_complete(ArgLead, CmdLine, CursorPos)let key_list = keys(g:quickrun_config)let matched = []
for key_str in key_list
if stridx(key_str,a:ArgLead)==0call add(matched, key_str)endifendforreturn matched
endfunction
command!-nargs=? -complete=customlist,s:quickrun_switch_complete QuickRunSwitch : calls:quickrun_switch(<f-args>)" babelの設定letg:quickrun_config['babel'] = {
\ 'cmdopt': '--stage 1',
\ 'exec': "babel %o %s | node"
\ }
こいつは便利だぜー、とか思ってたら, 似たようなことを考える人はいたようで, unite-quickrun-configというのが公開されてました. 最初からこっち使っときゃよかったかなー。
ま、command or uniteのsourceで多少違い出てるので良しとするか。