Vim
Go
vimrc

VimでGoの開発環境を設定する方法のまとめ

More than 3 years have passed since last update.


TL;DR

本記事ではVimでのGo開発環境の構築方法をまとめる。

基本的に以下のプラグインの使用方法についてのまとめになります。

fatih/vim-go: Go development plugin for Vim

情報が古くなっている可能性がありますので、まずは上記のREADMEを参照して下さい。


この記事でできること



  • *.go をGo言語と判別してくれるようにする

  • シンタックスハイライト

  • オムニ補完

  • 保存時の自動整形(go fmt)

  • 保存時の自動ビルドとquickfix

  • シンタックスチェック(重いので使ってないけど一応できる)


GOPATHの設定


*shrc

export GOPATH=${HOME}/go


現在はGOROOTは指定する必要はないようです

今回はホームディレクトリにgoというディレクトリを作成してそこをGOPATHに指定しました

fish-shellを使用している方は後述する vim-go の README に補足が書いてあるのでそちらを参照して下さい


vimrcの設定

Go言語用のオールインワンプラグインを作っている方がいるので、使わせて頂きます

fatih/vim-go

プラグインの導入方法詳細は割愛して、例えばNeoBundleだと以下のように設定します


vim-goの導入

NeoBundle 'fatih/vim-go'


少なくとも自分の今の環境だと*.goを自動でGo言語だと判別してくれないようです(最新にパッチが当たっているかは未調査)

vim-goは拡張子の判別も含んでいるため、とりあえず上記のように設定すればよいと思います

*.goの拡張子の判別設定を自分でやっているのなら、以下のようにLazy化してもいいかもしれないです(動作未確認)


lazy化

NeoBundleLazy 'fatih/vim-go', {

\ 'autoload' : { 'filetypes' : 'go' }
\ }


必要パッケージのインストール

vim-go が依存しているパッケージをインストールします

vimを起動後 以下のコマンドを実行してください


vim-go依存パッケージのインストール

:GoInstallBinaries


GitMercurial に依存してるらしいので、入っていない場合は先にパッケージを入れておくのをおすすめします


ubuntuでの例

sudo apt-get install git mercurial


あとはお好みで vim-go の設定を追記して下さい

自分は今のところ以下の設定のみ足しています


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等に書いていれば必要ないのかは未調査