pockestrap

Programmer's memo

vim-go + gocode でインポートしていないパッケージも補完したい

TL;DR

Add let g:go_gocode_unimported_packages = 1 to your .vimrc

欲求

通常、gocode ではインポートしていないパッケージの関数等は補完されない。
例えば、strings.Spと打ってstrings.Split()が補完されるためには、import "strings"が必要である。

github.com

これを修正するコミットが gocode に入っているため、有効にしたい。

試行錯誤

上記 Issue には、以下のコマンドを実行するように書かれている。

go get -u github.com/nsf/gocode
gocode close
gocode set unimported-packages true

ところが、これをやってもうまくいかない。

様子を観察してみると、gocode set unimported-packages trueを実行後に~/.config/gocode/config.json内のunimported-packagestrueになっているのがわかった。
しかし、何者かがこれを勝手にfalseに変えてしまうため、このオプションが有効にならないようだ。

引き続き調べたところ、この挙動を引き起こしているのはvim-goだと言うことがわかった。

Specifies whether gocode should include suggestions from unimported packages. By default it is disabled.

let g:go_gocode_unimported_packages = 0

https://github.com/fatih/vim-go/blob/55906b13dd26f196b88d5c3c6e8a7040714fa71e/doc/vim-go.txt#L1450-L1456

.vimrclet g:go_gocode_unimported_packages = 1を追記したところ期待する動作をするようになった。