goimportsなどが更新されていたので、vim-goでGoUpdateBinariesコマンドを実行したらvimで自動補完が効かなくなった。
結局はgocodeの調子が悪いことが多いので、原因の調べ方をまとめる。
(今回の場合は let g:go_gocode_propose_source = 0 で解決した。)
TL;DR
- vim-goの自動補完に正しい候補がでなくなった
gocodeをgocode exitしたあとgocode -debug -sで再起動する- vimも再起動して適当なGoファイルをいじっていると、
gocodeのデバッグ出力が確認できる - 今回は
vimrcファイルにlet g:go_gocode_propose_source = 0を加えることで解決した。
なおvimバージョンは以下。
VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug 15 2018 08:48:39)
macOS version
gocodeは以下のコミットハッシュの状態(
#71がマージされた状態)
https://github.com/mdempsky/gocode/tree/22f3bf7a9256a30885d7cd46da4657cc878f3f4f
vim-goの自動補完が効かなくなった
goimportsやgolintが更新されていたので、更新しようとした。
私はひとつひとつ更新するのが面倒なので、vimでGoUpdateBinariesコマンドを実行することで全て更新している。
今回、コマンド実行後vim-goで自動補完が動かなくなってしまった。
vim-goを更新すれば直るか?と思い(自分はdeinを使っているので、)call dein#update()してみたがそれでもダメだった。
gocodeの挙動を確認する
2018/10/20時点のvim-goは内部でgocodeを利用することで自動補完を実施している。
gocode exitしてバックプロセスを再起動(vimでGo触ってると再度起動する)しても直らなかった。
vim自体がロギングしているログはmessagesで確認することができるが、messagesではgocodeが出力しているログは確認できない。
なので、gocodeをデバッグモードで起動して確認した。gocodeはgocode exitで一度終了したあと、gocode -debug -sと実行することでデバッグ出力をターミナルに出力する状態で起動できる。
あとはこの状態でvimを操作するとgocodeからデバッグログが出力される。
今回は以下のようなデバッグ出力が出力された。
$ gocode -debug -s
...
2018/10/20 16:25:27 Error parsing input file (outer block):
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:28:1: expected operand, found ';'
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:36:3: expected ')', found 'EOF'
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:36:3: expected ';', found 'EOF'
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:36:3: expected ';', found 'EOF'
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:36:3: expected '}', found 'EOF'
2018/10/20 16:25:27 /Users/budougumi0617/go/src/github.com/budougumi0617/sample_repo/foo/no_complete.go:36:3: missing ',' in argument list
ログを頼ったり、gocodeの更新を確認したところsourceオプションの有無で挙動が変わるらしく、以下のオプションをvimrcに書いたところ直った。
let g:go_gocode_propose_source = 0
今回の原因はgocodeでこの変更が入ったからのようだ。
- cache packages to improve speed
終わりに
おそらくvim-go側も対応入ると思うので、しばらくはvim-goとgocodeをこまめに更新したほうが良いのかもしれない。
直すまで半日くらいVSCodeで作業していたのだが、VSCode(+vimプラグイン)でGo書くのもなかなか良かった。
けどやっぱりvimのほうがシンプルで好きだ。