先日、Go言語バージョン1.1がリリースされました。安定しているのは勿論、幾つか新機能が追加されましたが、何よりもパフォーマンスチューニングが施された一番嬉しいですね。
VimでGo言語を開発するには、Go言語のリポジトリに含まれる
インデントが崩れたりした場合でも
これだけあれば、この夏のビーチでモテモテ間違いなしですね!
Go 1.1 performance improvements | Dave Cheneyさて今日はVimを使ってGo言語を開発する方法を紹介したいと思います。This is the first in a series of articles analysing the performance improvements in the Go 1.1 relea...
http://dave.cheney.net/2013/05/21/go-11-performance-improvements
VimでGo言語を開発するには、Go言語のリポジトリに含まれる
misc/vim
にランタイムパスを追加します。以下を vimrc に追加します。setrtp+=$GOROOT/misc/vim
入力補完を行う
入力補完として gocode を入れます。正直、これは必須と言っていいです。$ go get github.com/nsf/gocodeを実行します。
$GOPATH/bin
にインストールされるのでパスを通しておきましょう。$GOROOT
に入ってしまった人は一度削除して、$GOPATH
を設定後にもう一度、上記のコマンドを実行します。$GOPATH
にインストールされているはずなので以下の様にvimrcに追加します。exe "set rtp+=".globpath($GOPATH, "src/github.com/nsf/gocode/vim")gocodeを入れると、パッケージ名の途中であったり変数の後の "."をタイプした後
<c-x><c-o>
をタイプすると、あり得る関数名や、メソッド名がずらずらーっと補完出来ます。
その際、completeopt
というオプションに preview
を足しておくと、補完内容が詳細に表示されて分かりやすくなります。set completeopt=menu,preview
パッケージをインポートする
Go言語でも、欲しい機能があればパッケージをインポートします。その際、いちいちファイルの先頭に移動して、import
を追加したりしてませんか?上記のオフィシャルが提供しているVimプラグインを使っているのであれば、以下の様に実行しましょう。:Import fmtbefore
package mainafter
func main() {
fmt.Println("hello world")
}
package mainカーソルの移動もありませんので、引き続きコーディングが再開出来ます。また、コマンドの引数でパッケージ名の補完が効きます。
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
net/ht
までタイプして <tab>
をタイプすれば net/http
を補完してくれますし、ありえる候補も補完してくれます。ドキュメントを見る
Go言語にはgodoc
というツールが付属しています。コマンドラインから使っても便利なのですが、Vimから使うともっと便利になります。:Godoc net/http
:Import
と同様にパッケージ名が補完出来ます。整形する
Go言語にはgo fmt
というコマンドが付属しており、相応しいソースに整形する事が出来ます。インデントが崩れたりした場合でも
:Fmtを実行するだけで、綺麗なソースコードに整形されます。
テンプレートを使う
手前味噌ですが、僕が作ってる sonictemplate-vimを使うと、ソースの書き始めが一気に楽になります。mattn/sonictemplate-vim - GitHubこれを bundle ディレクトリ等に入れておき、goのファイルを新規で開きます。そこで
https://github.com/mattn/sonictemplate-vim
:Template web-appを実行すれば以下のコードが展開されます。
package mainこの後、
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "")
})
http.ListenAndServe(":8080", nil)
}
http.ListenAndServe(":8080", nil)
の1行上で空行を開け、:Template <tab>
をタイプすると、web-app に特化した候補が優先的に表示されます。
sonictemplate-vim はGo言語だけでなく、他の言語でも同様に便利なテンプレートが用意されています。よろしければ使ってみて下さい。また pull-req によるテンプレートの追加もお待ちしています。これだけあれば、この夏のビーチでモテモテ間違いなしですね!