Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

最近, ちょいちょい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
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を用意した.

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

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

.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で多少違い出てるので良しとするか。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>