TL;DR
本記事ではVimでのGo開発環境の構築方法をまとめる。
基本的に以下のプラグインの使用方法についてのまとめになります。
fatih/vim-go: Go development plugin for Vim
情報が古くなっている可能性がありますので、まずは上記のREADMEを参照して下さい。
この記事でできること
-
*.go
をGo言語と判別してくれるようにする - シンタックスハイライト
- オムニ補完
- 保存時の自動整形(go fmt)
- 保存時の自動ビルドとquickfix
- シンタックスチェック(重いので使ってないけど一応できる)
GOPATHの設定
export GOPATH=${HOME}/go
現在はGOROOTは指定する必要はないようです
今回はホームディレクトリにgo
というディレクトリを作成してそこをGOPATHに指定しました
fish-shellを使用している方は後述する vim-go の README に補足が書いてあるのでそちらを参照して下さい
vimrcの設定
Go言語用のオールインワンプラグインを作っている方がいるので、使わせて頂きます
プラグインの導入方法詳細は割愛して、例えばNeoBundleだと以下のように設定します
NeoBundle 'fatih/vim-go'
少なくとも自分の今の環境だと*.go
を自動でGo言語だと判別してくれないようです(最新にパッチが当たっているかは未調査)
vim-go
は拡張子の判別も含んでいるため、とりあえず上記のように設定すればよいと思います
*.go
の拡張子の判別設定を自分でやっているのなら、以下のようにLazy化してもいいかもしれないです(動作未確認)
NeoBundleLazy 'fatih/vim-go', {
\ 'autoload' : { 'filetypes' : 'go' }
\ }
必要パッケージのインストール
vim-go
が依存しているパッケージをインストールします
vimを起動後 以下のコマンドを実行してください
:GoInstallBinaries
Git
と Mercurial
に依存してるらしいので、入っていない場合は先にパッケージを入れておくのをおすすめします
sudo apt-get install git mercurial
あとはお好みで vim-go の設定を追記して下さい
自分は今のところ以下の設定のみ足しています
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
他の設定に関してはvim-goやその他の依存プラグインの README を参照して下さい
シンタックスハイライト
上記の設定ができていれば、シンタックスハイライトが有効になっているはずです
追加で err のハイライトも足しておくとより捗るらしいです
"err"という文字列をHighlightしておくとGolangのコードリーディングが捗る
オムニ補完
上記の設定ができていれば、C-x C-o
でオムニ補完ができるはずです
neocompleteで自動補完する場合は以下のように設定しました
let g:neocomplete#sources#omni#input_patterns.go = '\h\w\.\w*'
※githubのパッケージの補完が効かない場合の件について、記事末尾の補足に追記しました
コード整形
上記の設定ができていれば、保存時に go fmt
が自動で実行されるはずです
ビルドとquickfixの利用
以下のコマンドを利用して下さい
:GoBuild
シンタックスチェック有効化
syntasticを使えば特に設定することなくシンタックスチェックを有効化できます
ただ、大きいパッケージを入れるととたんに重くなるので、vim-watchdogsとかの導入も検討して下さい(設定方法未調査)
NeoBundle 'scrooloose/syntastic'
補足
Githubからgo getしてきたパッケージの補完が効かない
以下を試してみてください
cd ${GOPATH}/src/github.com
go build -v ./... && go install ./...
正確なところは未調査ですが、どうやら補完のためには ${GOPATH}/pkg
以下にバイナリがインストールされてる必要があるようです
Vim 内でのGOPATHの設定?
設定方法を調べている際、ブログ等で以下のように設定している方が多いようでしたが、
vim-go
のReadmeにも見られなかったし、設定しなくても実際の動作は影響しませんでした
exe "set rtp+=".globpath($GOPATH, "src/github.com/nsf/gocode/vim")
以前は必要だったのか、bashrc等に書いていれば必要ないのかは未調査