はじめに
こんにちは、Go界の橋爪功です。以前mattnさんがVimを使ったGoの開発環境というエントリを書かれていたんですが、自分用にもEmacs版を、と思ったので、まとめておきます。
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (2件) を見る
参考
- Big Sky :: Vimを使ったGo言語開発手法
- / - go - The Go Programming Language - Google Project Hosting
- Emacsのオプションを入れときましょう
- Adentures in Go: Using ctags with Go
- etags/ctagsを使いたい場合には、まだGoに対応してないので.ctagsファイルで対応
- EmacsでのGo言語編集環境 - unknownplace.org
- typesterさんの設定
設定
Go mode
Go用のメジャーモードのGo modeというのが標準で配布されています。使いましょう。load-pathにgo-mode.elとgo-mode-load.elを突っ込んでおきます。
(require 'go-mode-load) (add-hook 'go-mode-hook '(lambda() (setq c-basic-offset 4) (setq indent-tabs-mode t) (local-set-key (kbd "M-.") 'godef-jump) (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports) (local-set-key (kbd "C-c i") 'go-goto-imports) (local-set-key (kbd "C-c d") 'godoc))) (add-hook 'before-save-hook 'gofmt-before-save)
Goでは標準のインデントはハードタブなのでindent-tabs-modeはtにしておいたほうがいいでしょう。「俺はハードタブなんか使いたくない!」と駄々をこねても、どうせgofmtで修正されるので諦めてください。
コードジャンプ
godef
godefを入れておくとTAGSを作成せずとも定義元まで参照できて大変便利です。
% go get code.google.com/p/rog-go/exp/cmd/godef
ctags (etags, Exuberant Ctags)
ソースコードの検索にetags使いたいんですが、まだGo言語にはデフォルトでは対応してません。でも下記の.ctagsファイル書いておけばtagsファイル生成できます。
--langdef=Go --langmap=Go:.go --regex-Go=/func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\2/d,func/ --regex-Go=/var[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,var/ --regex-Go=/const[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,const/ --regex-Go=/type[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,type/
これを ~/.ctags として通常のctagsと同様プロジェクト内で次のコマンド実行するとEmacs用のTAGSファイルが作成される。
% cd /path/to/project
% ctags -Re
あとは M-x visit-tags-table で作成されたTAGSファイルを指定して M-. でジャンプするだけ。(上記のelispでgo-modeで定義されたgodef-jumpを利用するように変更している)
auto-complete + gocode
mattnさんの記事にもありますが、gocodeを使って自動補完を有効にします。
auto-complete
そういえば以前のものから更新してなかったので、更新しがてらinit.elの設定を確認。
(add-to-list 'load-path "~/.emacs.d/auto-complete") ;;;; auto-complete (require 'auto-complete-config) (global-auto-complete-mode t) (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") (ac-config-default)
gocode
まずはgocodeを設定します。mattnさんのブログにあるようにGOPATHとPATHをちゃんと確認してgo getで持ってくる。
% GOPATH=/path/to/project % PATH=$GOPATH/bin:$PATH % go get -u https://github.com/nsf/gocode
次に go-autocomplete.el をload-pathが通っているディレクトリに突っ込んでおく。
init.elにGo modeではM-TABでauto-completeを起動するように設定を追加。(上記のものを編集)
(add-hook 'go-mode-hook '(lambda() (setq c-basic-offset 4) (setq indent-tabs-mode t) (local-set-key (kbd "M-." 'godef-jump) (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports) (local-set-key (kbd "C-c i") 'go-goto-imports) (local-set-key (kbd "C-c d") 'godoc) (define-key ac-mode-map (kbd "M-TAB") 'auto-complete)))
あとは C-c C-a のimport packageを使えばだいたい幸せです。