LoginSignup
1

More than 5 years have passed since last update.

VimでCoffeeScriptのコンパイル結果を確認する

Posted at

備忘録です。
Vim上でCoffeeScriptで書かれたコードのコンパイル結果を手っ取り早く確認する方法

:w !coffee -bcs

概要

CoffeeScriptのコマンドを確認

CoffeeScriptのREPLをNode.jsでインストールする。

$ npm -v
5.3.0

$ npm install -g coffeescript

$ coffee -v
CoffeeScript version 2.0.0

Coffee コマンド - sappari wiki

オプション 説明
-c, --compile .coffee を .js にコンパイル
-s, --stdio 標準入力からcoffeeスクリプトを読んで、標準出力にJavaScriptを渡す。
-b, --bare トップレベル関数safety wrapper無しでコンパイル。

ざっと必要そうなものを取り出した。
結果は後述の実験を参照。

Vimのファイル出力の仕様

:help :w

:[range]w[rite] [++opt] !{cmd}

Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.

以下雑な意訳

Vimは:w !{cmd}と入力すると、
任意のコマンドの標準入力に現在開いているファイルの文字列を投げ込んで実行できる。

また、頭に[range]という文字列があることから、
ビジュアルモードで選択した状態で:w !{cmd}と入力すると、
選択状態を示す:'<,'>w !{cmd}に自動保管され、選択部分を標準入力に渡すことも可能。

実験

以下のコードで実験を行う。

emit = (type, {msg}) ->
  unless type is "verbose" then return
  console.log "done"
  expect(msg).to.equal "not found ticket"

標準入力から実行したいので、まずは-sオプションのみをつけて実行。

:'<,'>w !coffee -s

何も表示されず……

他のコードで試したところ、ReferenceError: hoge is not defined等のエラーが表示された。
どうやら-sオプションのみ利用した場合はJavaScriptに変換後、評価を行っているようだ。

実行結果が見たいだけなら-sオプションのみで解決だが、
今回確認したいのはコンパイルされたJavaScriptなのでコンパイルを明示する-cオプションを併用して実験を継続。

:'<,'>w !coffee -sc
// Generated by CoffeeScript 2.0.0
(function() {
  var emit;

  emit = function(type, {msg}) {
    if (type !== "verbose") {
      return;
    }
    console.log("done");
    return expect(msg).to.equal("not found ticket");
  };

}).call(this);

見事コンパイルに成功し、JavaScriptのコードが表示された。
ただし、(function() {}).call(this);が足されて読みづらいので、もっと読みやすくしたい。
そこで、更に-bオプションを含めて実行する。

:'<,'>w !coffee -bcs
// Generated by CoffeeScript 2.0.0
var emit;

emit = function(type, {msg}) {
  if (type !== "verbose") {
    return;
  }
  console.log("done");
  return expect(msg).to.equal("not found ticket");
};

コードが簡素になり読みやすくなった。
従ってVimで一部の箇所のコンパイル結果を確認したい場合は、
ビジュアルモードで選択して:w !coffee -bcsとタイプすれば良い。

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
1