この記事は Vim Advent Calendar 2015 の 1日目の記事です。
Vim の golang サポートは非常に手厚いことで有名です。しかしながら、ちょっと $GOROOT
や $GOPATH
の下にあるソースコードを探検したいって時に、手軽な良い方法がなくて困ってました。主に私が。
誰か作ってくれないかなぁ (/ω・\)チラッ
— MURAOKA Taro (@kaoriya) 2015, 11月 20
誰か作ってくれないかなぁって期待していたんですが、誰もやってくれないようでしたので、自分で koron/vim-gosrc を作りましたよ。ほぼ :Godoc
のパクりです。
まぁ実際のところアドベントカレンダー用に用意していた、本命のネタの進捗が思わしくなかったのと、Vim script アドベントカレンダー 2015のほうがふさわしそうだったので、急遽ネタをコンバートしたわけです。
デモ
まずはどんな感じか見てみましょう。
<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 の紹介でした。