LoginSignup
14
13

More than 5 years have passed since last update.

babel + Node.js をvim-quickrunで実行する

Posted at

最近, ちょいちょいbabelを触ることが増えてきた.

babelはEcma 6th, 7thで書かれたコードをコンパイルして, ブラウザやNode.jsが実行できる形式のJavaScriptコードに変換してくれるツール(transpiler)だ.

一方, 僕はJavaScript開発時, ちょっとしたJavaScriptのスニペットはvim-quickrunを使ってVimから実行している.

しかし, babelでtranspileしないと動作しない.jsのコードを:QuickRunとしても, 当然Node.jsに怒られてしまう.
そこで, babeってからNode.jsで実行するようにQuickRunの設定を書いてみた.

.vimrc
let g: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を用意した.

  1. .jsファイルを開く
  2. :QuickRunSwitch babel でバッファ内におけるデフォルトの typeを変更(一応補完も効くようになってる)
  3. <Leader>r でサックリ実行

.vimrcは下記のようになる.

.vimrc
let g:quickrun_config = {}
function! s:quickrun_switch(...)
  if a:{0} && has_key(g:quickrun_config, a:{1})
    let type_name = a:{1}
    echo 'Quickrn switch type: '.type_name
    let b:quickrun_config = g:quickrun_config[type_name]
  endif
endfunction
function! 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) == 0
      call add(matched, key_str)
    endif
  endfor 
  return matched
endfunction
command! -nargs=? -complete=customlist,s:quickrun_switch_complete QuickRunSwitch : call s:quickrun_switch(<f-args>)

" babelの設定
let g:quickrun_config['babel'] = {
      \ 'cmdopt': '--stage 1',
      \ 'exec': "babel %o %s | node"
      \ }

こいつは便利だぜー、とか思ってたら, 似たようなことを考える人はいたようで, unite-quickrun-config というのが公開されてました. 最初からこっち使っときゃよかったかなー。

ま、command or uniteのsourceで多少違い出てるので良しとするか。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13