GoをVimで書こうとした時には、プラグインを入れたくなります。
Vimのプラグインであるvim-goである程度困らない環境を構築していきます。
前提環境
elements | version |
---|---|
go version | go1.12.6 darwin/amd64 |
OS | MacOS Mojave 10.14.5 |
Vim | VIM - Vi IMproved 8.1 |
GOPATHなどは通しておいてください。
とりあえずインストール
vim-goをインストールします。NeoBundle
やVundle
、vim scriptでインストールしても良いですが、
ここではvim-goのレポジトリに書いてある手順でインストールしていきます。
と言っても、git clone
するだけです。
$ git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
vimを再起動して、:GoPath
などのコマンドが使えれば完了です。
エラーの対応
goplsが見つからない
Vimを再起動し、.go
のファイルを開くと、次のようなエラーが出ました。
vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it
Errorr detected while processing function <SNR>36_register[5]..go#lsp#DidOpen
対応
素直に:GoInstallBinaries
を実行します。
一部のツール(guru
やgoimports
など)が既にインストールされている場合は:GoUpdateBinaries
も実行します。
tools/cmd/goplsがダウンロードできない
どうして。
対応
色々と調べてみると、どうやら元々入っていたGoのバージョンが果てしなく古かったためでした。12.6ではダウンロードできました。
最新のバージョンを使いましょう。
Features that rely on gopls will not work correctly outside of GOPATH or a module
なんじゃこりゃ。
対応
今だに原因究明できていませんが、go list
コマンドが失敗するとこのようなエラーが出る場合があるそうです。
重要なエラーではなさそうなので、握りつぶしておきます。
let g:go_null_module_warning = 0
テンプレートを消したい
なにも設定していないと新しいGoファイルを作成した時にテンプレートが吐き出されるが正直なくていいなと感じました。
packagemainimport"fmt"funcmain(){fmt.Println("vim-go")}
対応
以下のコマンドで消せます。
let g:go_template_autocreate = 0
保存が遅すぎる
対応
vim-go: initialize gopls
と表示される場合はgopls
が初期化する時に時間がかかっている場合があります。
一度、GoUpdateBinaries gopls
で直接アップデートして再度保存を試みてください。
そうでない場合は、goimports
(パッケージのimportの削除や追加をよしなにやってくれるツール)やgofmt
(フォーマットしてくれるツール)の影響やsyntastic
(保存時にLintとかやってくれるツール)の影響が大きいことが考えられます。
次のコマンドで、設定を変更します。
let g:go_fmt_command = "gofmt"
let g:syntastic_go_checkers = ['golint', 'govet', 'errcheck']
おわりに
快適なGoライフを!!