Vim でコマンドからインクルードを挿入するプラグインつくった

この記事は Vim Advent Calendar 2012 358日目の記事になります。
Vim Advent Calendar 2012 も残すところあと4人となりました!

なにか書き残したことがある方はお早めにご参加下さい。


また、Vim Advent Calendar 2013 の募集も開始しました。
こちらも興味のある方はぜひご参加下さい。


さて、今回のネタですが Lingr の某部屋で
『コマンドからインクルードを挿入したい』
みたいな話があったのでちょっと書いてみました。

[プラグイン]

NeoBundle "osyo-manga/vim-stargate"

[使い方]

" インクルードディレクトリのパスを filetype ごとに設定
let g:stargate#include_paths = {
\   "cpp" : [
\       "C:/MinGW/lib/gcc/mingw32/4.6.2/include/c++",
\       "C:/cpp/boost"
\   ]
\}

" #include <boost/any.hpp> を挿入する
StargateInclude boost/any.hpp

https://f.cloud.github.com/assets/214488/1606512/b2e27d4a-5446-11e3-9ee5-492f86a3d037.gif


:StargateInclude コマンドで任意のインクルードファイルの挿入を行うことができます。
:StargateInclude はインクルードファイルの補完も行うことができます。
この時に g:stargate#include_paths、もしくは 'path' に設定されているインクルードディレクトリを参照します。
ライブラリのパス等は予めこのオプションにて設定しておく必要があります。
(ちなみにここら辺の処理は neocomplete.vim を参考にしまくりました。


挿入されるインクルードの位置は、カーソルから後方に向かって一番近い "#include" の位置になります。
"#include" の位置が見つからなかった場合は先頭から最初に出現する空白行の位置に挿入されます。
ここら辺はユーザ側で柔軟に設定できるようにしてみたいですね。


とりあえず、対応している言語は C と C++ になります。
一応、Ruby の設定も書いてあるので使用する事はできるけど、まだ動作は未確認。
そんな感じで、ざっと作っただけなので、なにか要望とか質問があれば Issues 等で教えてもらえると助かります。