遅刻しました 20日のアドベントカレンダーです。
Emacsを使ってたらカッコいいという理由で始めて
3年くらいつかってますが未だに使いこなせてないです。
一応参考
環境
OSX
Emacs 24
Go 1.5.2
Emacsは色々設定詰め込んで起動が重くなったのでemacs serverを立ち上げて
emacs clientで接続しています。
GoはHomeBrewでインストールしました。
環境変数にパスを通す
以下の様に環境変数を設定しています。
export GO15VENDOREXPERIMENT=1
export GOROOT=$(brew --prefix go)/libexec
export GOPATH=$HOME/work
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
GO15VENDOREXPERIMENT
はコンパイルするためのGOPATHをリポジトリ内のvendorから探すようにできるオプションです。
パッケージのインストール
emacsにはpackage-installとかcaskとかel-getとか色々あるんですが
僕はel-getを使ってます。
el-getで初期化時に読み込んでるパッケージは以下です
(el-get-bundle! go-mode)
(el-get-bundle! go-autocomplete)
(el-get-bundle! go-eldoc)
それとemacsに環境変数を設定します。
(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" (concat (getenv "HOME") "/work"))
init.elの設定
(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" "/Users/kazu/work")
(add-hook 'go-mode-hook (lambda ()
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)
(set (make-local-variable 'compile-command)
"go build -v && go test -v && go vet")
(local-set-key (kbd "M-.") 'godef-jump))
(go-eldoc-setup)
)
gocode
gocodeは補完を提供してくれるツールです。
auto-completeと組み合わせることで関数などの補完をしてくれます。
インストール方法
$ go get github.com/nsf/gocode
godoc
godocはコマンドラインからgoのドキュメントを閲覧できるようにしてくれます。
それをemacs内でも見れるようにgo-modeに設定が含まれています。
インストール方法
$ go get golang.org/x/tools/cmd/godoc
M-x godoc net/http
の結果
go-eldoc
go-eldocは下に関数の引数や戻り値を表示してくれます。
便利です
http.Getにフォーカスがあると以下の様にメッセージにでます。
func(url string) (resp *http.Response, err error) [2 times]
goimports
Goでは使わないパッケージを読み込んでるとコンパイルができなくて
それはそれでいいんですが、試しながら書いてたり
使わないパッケージや使うために一々importを書きなおさなくてはいけなくてめんどくさいので
それを楽にしてくれるツールです。
自動でimportを加えたり消したりしてくれます。
インストール方法
$ go get golang.org/x/tools/cmd/goimports
init.elの設定
; gofmtをgoimportsに上書き
(setq gofmt-command "goimports")
; セーブした時にgofmtを実行する
(add-hook 'before-save-hook 'gofmt-before-save)
これでセーブした時に自動でimportを調整してくれます。
自分はauto-saveと組み合わせて手が止まったら常にセーブするようにしておくようにしています
goのinit.el
全体的なGoの設定
(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" (concat (getenv "HOME") "/work"))
(add-hook 'go-mode-hook (lambda ()
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)
(set (make-local-variable 'compile-command)
"go build -v && go test -v && go vet")
(local-set-key (kbd "M-.") 'godef-jump))
(go-eldoc-setup)
)
まとめ
全然 emacsを鍛えられてないのでもっと鍛えます。
参考
http://unknownplace.org/archives/golang-editing-with-emacs.html
http://tleyden.github.io/blog/2014/05/27/configure-emacs-as-a-go-editor-from-scratch-part-2/