僕はGolangで開発する際、Neovimを使用しています。
Golangのバージョンアップに伴い、gocodeによる補完がうまく動かなくなったりと色々と問題が発生したので、プラグインや設定の見直しを行いました。その際の備忘録を書いていきます。
前置き
プラグインマネージャーにはdeinを使わせてもらっているので、他のツールを使っている方は適宜読み替えていただけると助かります。
メインで利用するプラグインは以下の通りです。
以前まではvim-goのみで補完や文法チェック、フォーマッティングまで全部お任せできていたのですが、上述したようにgocodeを利用した補完が難しくなったため、LSP(Language Server Protocol)に一部機能を任せる形に設定しています。
Golangにおけるgocode/LSPについての経緯・情報については以下の記事を参考にさせていただきました。ありがとうございます。
https://mattn.kaoriya.net/software/lang/go/20181217000056.htm
各種プラグイン設定
vim-go
特に特別な設定は行なっていませんが、LSPを導入することによって不要になる機能でキーマッピングがぶつかるものを無効化しています。
[[plugins]]repo='fatih/vim-go'hook_add=''' # 保存時に必要なimportを自動的に挿入letg:go_fmt_command="goimports"# LSPに任せる機能をOFFにするletg:go_def_mapping_enabled=0letg:go_doc_keywordprg_enabled=0'''
LanguageClient-neovim/deoplete
deopleteについても特に特別な設定は行なっていません。
NeovimのLSPクライアントの設定も基本的には公式のREADMEに沿った形です。
languageサーバーにはgo-langserverを設定している例が多いですが、内部ではgocodeが使われているとのことですので、Golang公式がサポートしているというgolspを設定しています。
そのため設定を変更する前にgolspを取得しておきます。
go get -u golang.org/x/tools/cmd/golsp
[[plugins]]repo='Shougo/deoplete.nvim'on_event='InsertEnter'hook_add='''letg:deoplete#enable_at_startup=1'''[[plugins]]repo='autozimu/LanguageClient-neovim'build='bashinstall.sh'rev='next'hook_add='''sethiddenletg:LanguageClient_serverCommands={\'go':['golsp']\}letg:LanguageClient_loadSettings=1nnoremap<silent>K:callLanguageClient#textDocument_hover()<CR>nnoremap<silent>gd:callLanguageClient#textDocument_definition()<CR>'''
まとめ
自分自身まだ調べながら試行錯誤中ですので、より良い設定が見つかれば随時更新していきたいと思います。
記載内容に誤りがあったり、これも記載しておいた方がいいという点などございましたら、ご指摘いただけると助かります。