ZIPRawvac-2014-02.mdunite-include-reversedやばいやばい、VACの執筆予定日がもっと後だと思っていて、穴をあけてしまいました・・・本当に申し訳ないです。今後はitchyny/calendar.vimで予定を角煮するようにします。pluginの実装を先日開始しました。(*1)このプラギンは背景を説明するのが難しいと考え、そのために専用の記事を設けることにしました。Vimがもつ"include"という概念についてC言語に#include、Clojureにimport/require/use、Haskellにimport、Rubyにrequireなど、各プログラミング用語ごとに「他のファイルから何かをもってくる」という機能が存在します。ここではこれらすべてを総称してincludeと呼ぶことにしましょう。Vimはincludeに対する様々な機能を提供しています。Vi}試しに以下のようなコードを書き、:checkpath!してみましょう。0;}:checkpath!stdio.hとその依存先をすべて検索していることがわかります。つづいて先ほどのputsのところにカーソルを移動し、[Iと打鍵しましょう。いまC言語で試しましたが、他のfiletypeでも正しく設定が行われていれば利用できます。設定はftpluginで行います。scalaのためのプラギンvim-scalaでは、Scalaのimport文に対してVimのincludeに関する諸機能が利用可能になります。https://github.com/derekwyatt/vim-scala/blob/master/ftplugin/scala.vim#L2逆引きちょっと名前と機能で整理してみましょう。:checkpath!そのファイル内でincludeしてるものすべてを一欄する。再帰的にincludeをたどりつづけて木にする。[iカーソル位置のidentifierが最初に定義された行を表示。include先も辿る。[Iカーソル位置のidentifierが登場するすべての行をファイル名とともに表示。include先も辿る。gfカーソル位置がincludeのpathっぽいもののとき、そのファイルそのものを開くところで著者は以下のような機能も欲しいです。???「カーソル位置がincludeのとき、そのincludeからもってきたidentifierを使っている行をすべて表示する。include先を辿らない」つまり、前述の4つを順引とみたときの、逆引きが欲しいのです。この逆引き機能は、ざっと考えてみたところ、以下のようにして実現できそうです。:checkpath!などで、includeしているファイル一覧を先に生成しておくファイル先頭からidentifier単位で移動し、各identifier上で[Iし、includeしているファイル名を辞書に保持する最後まで探索が終わったところで、その辞書をもとに、includeしているファイル名からidentifierを一覧する。副作用のかたまりですね。これはあきらかにuniteのsourceにするのがよさそうな例です。いうわけでプラギン名はuniteのsourceでかつincludeを逆引きするもの、つまりunite-include-reversedという名前にしました。レポジトリはありますが、まだ動作するレベルにはなっていません。これを用いると[Iの結果のようなものをパースした辞書が得られます。諸事情であれからずっと停滞しています。この設定はujihisaさんがpullreqしました。