Go言語(golang) - Vim + SyntasticでコンパイルチェックとLintをする

syntasticとは?

scrooloose/syntastic

保存時に勝手にコンパイルチェックとかLintとかしてくれるVimプラグインです。
インストールとか使い方は省略します。ググれば色々情報出てきます。

コンパイルチェック

syntasticには標準でGoのチェッカーが入っています。
なので、インストールしたら特に設定することなく使えるはず。
(もちろんgo自体へのパスは通っていること。!which goで見えれば大丈夫)

golint

golintのチェッカーもあります。

  1. go get github.com/golang/lintでインストール($GOPATH以下に)
  2. .vimrcにgolintへのパスを通す
  3. 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

動作例

f:id:kanno_kanno:20131015112822g:plain

gifの補足。

  • まずfmtがインポートされていなくてコンパイルエラー
  • 未使用の変数があることでコンパイルエラー
  • 変数名がキャメルケースじゃなかったのでLintエラー

蛇足

似たようなシンタックスチェックのosyo-manga/vim-watchdogsでもやりたかったのだけど、
チェッカーの書き方がパッとは分からなかったのでとりあえずsyntastic。
(書き方が分からないのはgoコマンド側とerrorformat周りと環境考慮(Win/Macとか)など)

落ち着いたらやるかもしれないし、どなたかがやっていれば喜んでコピペする勢いです。