タオルケット体操

サツバツいんたーねっとでゲームとかガジェットのレビューとかをします

gomで管理しているモジュールをgocodeの補完対象にするために必要なVimの設定について

Golangには、まだ標準で依存性管理のツールが含まれていません。
1.5からは実験的機能としてvendoringが入ったようですが、今のところは様子っぽいかなーとおもっています。

というわけで、godepとか色々あるわけですが、僕はGemfileライクでシンプルなgomを愛用してます。
gomの仕組みとしては、プロジェクトルートに_vendorを掘ってそこに外部モジュールを投げ込み、動的に$GOPATHを設定するというような感じになってます。

ということは、普通にvimを起動した場合は環境変数にgom用のGOPATHが設定されないわけで、Vimからのmake時やgocodeによる補完時に必要とされるサードパーティを見つけることができません。
これは微妙に不便なので、Vim上から設定できるようにします。

当初vimrcに直接書いていたんですが、gomリポジトリにはVimのプラグインなどを入れるためのmiscがあるっぽかったのでプルリクエストを送ったところ取り込んでいただけました。
なのでランタイムパスに当該ディレクトリを追加したのち、SetGomEnvというコマンドを呼び出せば $GOPATH がgom管理下のものに書き換わります。

set rtp+=/path/to/go/src/github.com/mattn/gom/misc/vim
autocmd Filetype go SetGomEnv

(たぶん)これでオッケーなはずです。気になる方は.vim/plugin/以下にコピーしてきてもいいかもですね。
ついでにftdetectも追加されるのでGemfile形式としてfiletypeが認識されるとおもいます。

高速なオムニ補完がバリバリと聞くGolang + Vim + gocodeの組み合わせは快適でよいですね。

先のことはわかりませんが、gocodeの対応の問題とかもあるので、当面はgomを使い続けるのが色々と快適なのかなーとおもいました。


余談

間違って覚えたVim scriptイディオムを使ってたり、シェルスクリプトワンライナーに頼ってWindows環境で動作しないコードになっていたりとVim script力のアレさを感じたのでVim scriptテクニックバイブルをもう一度読み直そうとおもいました。

さらにrebase -iしたブランチをpush -fしてレビューコメントをふっ飛ばしたりしたのでもうちょっとGithub力を上げる必要があるとか、たった十数行の(しかもツールそのものの機能には関係ない)コードなのに色々と反省することの多いPRになってしまいました。

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖