EmacsでのGo言語編集環境(Linux編)
http://unknownplace.org/archives/golang-editing-with-emacs.html
とだいたい同じだったんですが、微妙に違ったところがあったのでメモ。
環境は Ubuntu 13.04 64bitです。
バイナリのインストール
Ubuntuのパッケージやら PPAでありますが、公式に配布されるバイナリから
インストールすることにします。
https://code.google.com/p/go/downloads/list
から自分の環境にあったものを取得してください。
取得できたらそれを展開します。今回は /opt以下にインストールすることに
します。
% cd /opt % sudo tar xf ~/Desktop/go1.1.1.linux-amd64.tar.gz
これでインストールできました。
環境変数の設定
環境変数 PATH, GOROOT, GOPATHをそれぞれ設定します。
bashや zshの設定ファイルに以下を追加します。ここでは GOPATHを ~/local/goと
しました(~/goが一般的なようです)
# golang setting if [ -d /opt/go ]; then path=($HOME/local/go/bin /opt/go/bin $path) export GOROOT=/opt/go export GOPATH=$HOME/local/go fi
PATHは先程の tarball中の binディレクトリと GOPATHの binディレクトリに
それぞれ通しします。GOROOTは標準的なディレクトリにインストールした際は
不要なようですが(/usr/local等), 今回のように標準的でないインストールした
場合は設定が必要になります。MacOSXの brewやパッケージ管理システムを使って
インストールした場合は不要なはずです。
Emacsへの環境変数の設定
元の記事の環境変数 PATH, exec-pathに加えて、GOROOTを設定する必要があります。
(no-windowで利用される方はシェルの設定が行えていれば、特に Emacs側で設定する
必要はないと思います。環境変数がそのまま引き継がれるため)
私の設定方法については下記を参考にしてください
http://d.hatena.ne.jp/syohex/20111117/1321503477
とにかくPATH, exec-pathに加えて、以下のような設定を追加してください
(setenv "GOROOT" "/opt/go") (setenv "GOPATH" "/home/syohei/local/go") ;; (追記) 一応 GOPATHも
go-mode, go-autocompleteのインストールと設定
両方共 MELPAに登録されていますので、package.elを使っている方は
package-installだけでインストールできます。M-x package-list-packages
からインストールするか、下記の選択して eval-region等を行ってください
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (package-initialize) (package-refresh-contents) (dolist (pkg '(go-mode go-autocomplete)) (package-install 'pkg))
go-autocomplete.elは auto-completeやら go-mode-hook周りの設定が
ファイルをロードすることでしか行えないので、package.elでインストール
しても明示的に requireする必要があります。
(eval-after-load "go-mode" '(progn (require 'go-autocomplete)))
gocode, godefのインストール
元のページと同様にインストールしてください
% go get code.google.com/p/rog-go/exp/cmd/godef % go get -u github.com/nsf/gocode
"did you run git update-server-info on the server?"みたいな
エラーが出たらたぶんタイポしているので、打ち間違えがないか確認
するといいでしょう。(nsfを nfsって打っていてハマリました)
これでおそらく補完等が使えるようになったはずです。
Emacsのユーティリティ
helm-modeや anything-read-string-modeを使っていない人は元記事の
ように helm/anythingインタフェースで絞り込みができないので、
以下のようなものを定義すると良いと思います。
(defvar my/helm-go-source '((name . "Helm Go") (candidates . go-packages) (action . (("Show document" . godoc) ("Import package" . my/helm-go-import-add))))) (defun my/helm-go-import-add (candidate) (dolist (package (helm-marked-candidates)) (go-import-add current-prefix-arg package))) (defun my/helm-go () (interactive) (helm :sources '(my/helm-go-source) :buffer "*helm go*")) (define-key go-mode-map (kbd "C-c C-d") 'my/helm-go)
documentの表示もですが、import文の追加もできます。
(複数まとめて挿入できるようにはしましたが、それぞれに対して、
importと出しているのがださいように思われます。現状 go-modeの関数を
そのまま使っているためです。)
複数の import文を一度に挿入(イケてない...)
おわりに
問題等ありましたら、お知らせください。
何かアプリケーションが書けるようにとりあえず購入した本を
読もうと思います。