Go言語(golang) - Vim + SyntasticでコンパイルチェックとLintをする
syntasticとは?
保存時に勝手にコンパイルチェックとかLintとかしてくれるVimプラグインです。
インストールとか使い方は省略します。ググれば色々情報出てきます。
コンパイルチェック
syntasticには標準でGoのチェッカーが入っています。
なので、インストールしたら特に設定することなく使えるはず。
(もちろんgo自体へのパスは通っていること。!which go
で見えれば大丈夫)
golint
golintのチェッカーもあります。
go get github.com/golang/lint
でインストール($GOPATH以下に).vimrc
にgolintへのパスを通す- syntasticでgolintを使うようにする
.vimrcの例は後述します
go vet
go vet
というコマンドを使ったチェッカーもあります。
ただ、このコマンドどういう使い方をするのかイマイチわかっていません…。
(補足) go fmt
go fmt
のチェッカーもあります。
が、公式Vimプラグインの:Fmt
と異なりソースに変更を加えません。
あくまでチェックだけなのかな?
軽く試した感じよく分かりませんでした。
フォーマットは保存時に勝手に:Fmt
かけるようにしているので、そもそもチェッカーはいらなかった。
.vimrc例
" MEMO:$GOPATHがなければ手動でパス指定 if $GOPATH != '' " golintの実行パスを追加 execute "set rtp+=".globpath($GOPATH, "src/github.com/golang/lint/misc/vim") " syntastic設定 let g:syntastic_go_checkers = ['go', 'golint', 'govet'] endif " 保存時に自動で:Fmtをかける(syntastic関係ない) augroup Go autocmd! autocmd BufWritePre *.go Fmt augroup END
動作例
gifの補足。
- まず
fmt
がインポートされていなくてコンパイルエラー - 未使用の変数があることでコンパイルエラー
- 変数名がキャメルケースじゃなかったのでLintエラー
蛇足
似たようなシンタックスチェックのosyo-manga/vim-watchdogsでもやりたかったのだけど、
チェッカーの書き方がパッとは分からなかったのでとりあえずsyntastic。
(書き方が分からないのはgoコマンド側とerrorformat周りと環境考慮(Win/Macとか)など)
落ち着いたらやるかもしれないし、どなたかがやっていれば喜んでコピペする勢いです。