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 に追加します。
set rtp+=$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 fmt
before
package main
func main() {
fmt.Println("hello world")
}
after
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 によるテンプレートの追加もお待ちしています。
これだけあれば、この夏のビーチでモテモテ間違いなしですね!