Vim に Gosrc コマンド作った

golangのソースコードを開く、ちょっと小粋な Gosrc コマンドを作りました。

この記事は Vim Advent Calendar 2015 の 1日目の記事です。

Vim の golang サポートは非常に手厚いことで有名です。しかしながら、ちょっと $GOROOT$GOPATH の下にあるソースコードを探検したいって時に、手軽な良い方法がなくて困ってました。主に私が。

誰か作ってくれないかなぁって期待していたんですが、誰もやってくれないようでしたので、自分で koron/vim-gosrc を作りましたよ。ほぼ :Godoc のパクりです。

まぁ実際のところアドベントカレンダー用に用意していた、本命のネタの進捗が思わしくなかったのと、Vim script アドベントカレンダー 2015のほうがふさわしそうだったので、急遽ネタをコンバートしたわけです。

デモ

まずはどんな感じか見てみましょう。

demo01

<Tab> で補完、<CTRL-D> で候補の一覧といった感じで、$GOROOT 及び $GOPATH の下から、良い感じでディレクトリとファイルを補完してくれます。

使い方

インストールは gosrc.vim を ~/.vim/plugin/go あたりに置けばよいでしょう。githubに置いてあるので、vim-plugでもneobundleでも動くんじゃないでしょうか。どれも使ったこと無いので、本当のところはわかりません。

インストール後に、Vimを起動したらおもむろに :Gosrc とタイプし、続けて何文字か先行テキストを入力後に <Tab><CTRL-D> を押すと、補完候補が出てきます。最終的に *.go ファイルまで補完して <ENTER> を押せば、そのファイルを :split で開きましょう。

ディレクトリを選択したらどうなるのとか、:split じゃないコマンドで開きたいんだけど、みたいなことはあるかもですが、私が使う分にはコレで十分です。それらの機能が必要な人は、なんか良い感じのオプションを作ってpull request してください。オナシャス!

制作時の感想

特に難しいところはないのですが、そういえばコマンドの補完関数を書いたのは、初めてかも知れません。omnifuncの大元の仕組みを作ったのは私なのに、変ですかね。まぁ、自分が作った機能を使わないってのは、よくある話です。

あとは globpath() を駆使しました。ただ、補完候補を相対パスにするために、本来なら要らない for ループを書かざるを得ず、ちょっと不本意だったなぁという気持ちはあります。

以上、自作の koron/vim-gosrc の紹介でした。