Compiler Pluginについてしゃべってきた

資料はreStructuredTextっていう形式で書いたものをdocutilsというツールを使ってS5形式に変換したものだったんだけど変換前のreStructuredTextをとりあえず貼っておく。

後でS5形式のものをどこか置くはず(たぶん)

.. include:: <s5defs.txt>

================================================================================
初めてのCompiler Plugin
================================================================================

:Author: maedana
:Date:    2008-09-06

.. contents::
    :class: handout

自己紹介
================================================================================
.. class:: incremental

* `id:maedana`_
* フリープログラマになりたい派遣プログラマ(契約形態的な意味で
* 一年前くらい前から `SKIP`_ という社内向けSNSの開発に参加
* 今年6月にOSSとなり、気がつけばコミッタになってた。

.. _`id:maedana`: http://d.hatena.ne.jp/maedana/

.. _SKIP: http://www.openskip.org/

.. class:: handout
    
    そういえばXPJUGと日程かぶってる。会長がチームのリーダ(id:kuranuki)なだけに心苦しいがvimmのほうにどうしてもいきたかった。
    そういえばSeaser Conともかぶってる。イベント多すぎるよな。

経歴
================================================================================
.. class:: incremental

 ======= ===========================================================
 emacs   学生時代
 ------- -----------------------------------------------------------
 秀丸    5年前。新卒の頃。
 ------- -----------------------------------------------------------
 Eclipse 4年前から。正直もう使える気がしない(キーバインド的な意味で)
 ------- -----------------------------------------------------------
 vim     <- いまココ
 ======= ===========================================================

今日の話す内容
================================================================================
.. class:: incremental

* Compiler Pluginとは何か
* Compiler Pluginの使い方
* デモ
* デモの補足
* まとめ

Compiler?
================================================================================
.. class:: small

今日のお話ではいわゆるプログラミング言語のCompilerは勿論、 `各種パーサやtidy等のツール類も含みます。`

.. class:: small

`vimではとにかくテキストを解析して解析結果を決まったフォーマットで出力するもの はCompilerと見なせるんじゃないかなと。`

Compiler Pluginとは
================================================================================
.. class:: small

`特定のテキストのコンパイルサイクルを効率よく回すために` `Compilerを使うためのオプションを設定するプラグイン。`

.. class:: small

`Compilerを使うためのオプションとは:makeprg及び:errorformatのこと`

.. class:: small

`:compiler を使うことで:makeprgと:errorformatを設定する。`

.. class:: handout

    :help compiler を参照

    コンパイルサイクルとは、テキスト書いて パーサにかけて エラーを確認して エラーの場所へ移動して (全部のエラーがなくなるまで)エラーを直す こと。

Compiler Pluginを使う
================================================================================
.. class:: incremental

.. class:: small

 ================== ==============================================
 :comp[iler]        どんなCompilerがあるのか参照する
 ------------------ ----------------------------------------------
 :comp[iler] {name} Compiler {name}を使うときに機能するオプション
 ------------------ ----------------------------------------------
 :make [arguments]  コンパイルを行う(詳しくは:help make)
 ------------------ ----------------------------------------------
 :cn                次のエラーへ飛ぶ
 ------------------ ----------------------------------------------
 :cp                前のエラーへ飛ぶ
 ------------------ ----------------------------------------------
 :clist             エラーリストを表示する
 ------------------ ----------------------------------------------
 :copen             エラーリストを開く
 ================== ==============================================

.. class:: handout

    :compでどんなCompilerがあるのか確認する。
    適当なrspecファイルを開く
    :comp rspecで最新のvim-rubyプラグインがあればrspec用に:makeprgと:errorformatが設定される。
    :make % (%は今開いているファイル)でrspecコマンドが実行される
    :cnで次のエラーへ
    :cpで前のエラーへ
    :clistでエラーリスト参照
    :copenでエラーリストを開く

デモ
================================================================================

Compiler Pluginを使うと何がうれしいのか
================================================================================

普通に実行すると…
================================================================================
.. class:: incremental

* シェルに切り替えるの面倒
* ファイル名とか行番号確認するの面倒

Compiler Pluginを使うと
================================================================================
.. class:: incremental

* vimのなかで実行できて楽
* 簡単にエラー行に飛べて楽

Compiler Pluginの作り方
================================================================================
第二部で!(準備が間に合わなかったともいう

おまけ QuickFixについて
================================================================================
.. class:: incremental

.. class:: small

* :makeはQuickFixコマンドのひとつ。
* :help QuickFixCmdPreによると、QuickFixコマンドとは :make, :lmake, :grep, :lgrep, :grepadd, :lgrepadd, :vimgrep, :lvimgrep, :vimgrepadd, :lvimgrepadd がある。
* :grepはかなり便利。:vimgrepの方が便利みたいだけど僕の環境だと遅くて使い物にならない。
* `四天王の一人`_ が `書いてた`_ `ack`_ というperlの全文検索プログラムとの組み合わせがいい感じ。

.. _`四天王の一人`: http://d.hatena.ne.jp/secondlife/

.. _`書いてた`: http://d.hatena.ne.jp/secondlife/20080311/1205205348

.. _`ack`: http://blog.bulknews.net/mt/archives/002044.html

まとめ
================================================================================
.. class:: incremental

.. class:: small

* Compiler Pluginは便利だから使うといいよ。
* QuickFixを使いこなせるようになるといいと思うよ。
* 自分の使いたい言語やツールに対応するCompiler Pluginがないなら簡単だ(と思う)から作るといいよ。
* と思って作ろうとしたのがあるんだけどerrorformatに苦戦してまだ出来てない…orz



続きは:helpで!!!
================================================================================
.. class:: incremental

.. class:: small

 =========================== ==========================
 :help usr_30                Compilerの説明
 --------------------------- --------------------------
 :help compiler              :compierコマンドの説明
 --------------------------- --------------------------
 :help makeprg               :makeprgオプションについて
 --------------------------- --------------------------
 :help errorformat           :errorformatの書き方等
 --------------------------- --------------------------
 :help write-compiler-plugin Compiler Pluginの作り方
 --------------------------- --------------------------
 :help quickfix              QuickFixについて
 =========================== ==========================