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のほうがシンプルで好きだ。