Edited at

SublimeText3でのGo言語開発環境セットアップ

More than 3 years have passed since last update.

SublimeText好きとしては、Go開発環境もSublimeにしたい。


前提環境

他の環境で動かなかったらゴメンナサイ。


  • Mac Yosemite

  • go version go1.4.2 darwin/amd64 (brew install go)


SublimeText3インストール & Go基本設定

そろそろSublimeText3も安定していると思います。

また、Goの基本的なインストールは済んでいるものとします。

※Goのインストール、GOPATH, GOROOTの設定 など。他の記事などをご参考に!!


Go開発環境のためのsublime text3 package


GoSublime

SublimeでGoをやるといったらまずこの総合パッケージを入れます


  • Go言語シンタックス

  • 各種Go関連コマンド(gofmt, goimports)との連携

  • パッケージインポートの補助(command + . -> command + p)

  • 他、色々。(command + . -> command + .でメニューがでてきます)


goimports

設定をする際にgoimports1を入れておきましょう。

$ go get golang.org/x/tools/cmd/goimports


設定ファイル

メニュー -> Sublime Text -> Preference -> Package Settings -> GoSublime -> Settings - User

またはcommand + . -> command + 5でも開きます。

GOPATHは自分の環境のGOPATHに合わせてください。


GoSublime.sublime-settings

{

"env": {
"GOPATH": "/path/to/gopath",
"PATH": "$GOPATH/bin:$PATH"
},
"shell": ["/bin/bash", "--login", "-c", "$CMD"],
"fmt_cmd": ["goimports"],
"comp_lint_enabled": false,
}

※もしかすると、shell, GOPATH, PATHは設定不要かもしれません(未検証)。

設定値は自分の環境に合わせてください。


Godef


  • GoSublime に存在する GoToDefinitionGsDoc: no docs found と表示されてマトモに動かない(僕の設定の仕方が悪いだけかもしれない・・)

  • PackageのGo To Definition は、実は同じ関数名をリストアップしているだけ。自分で定義元を選ばなくてはならない

こんな状況ではIDEに匹敵する定義ジャンプとはいえないので、Godefを導入します。


godefの導入

$ go get -v github.com/rogpeppe/godef


設定ファイル

メニュー -> Sublime Text -> Preference -> Package Settings -> GoSublime -> Settings - User

GOPATHは自分の環境のGOPATHに合わせてください。(~ とか $HOME は使えないので要注意です。)


Godef.sublime-settings

{

"gopath": "/path/to/gopath/"
}

※プラグインの説明書きをみると、設定しなくても環境変数のGOPATH見に行くぜ!って書いてあるので、敢えて設定する必要がないかもしれません。


キーバインドの修正

command + d をGodefへ割り当てるという暴挙にでてきますので、キーバインドを直しましょう。

メニュー -> Sublime Text -> Preference -> Key Binds - User

以下を追加


Default(OSX).sublime-keymap

    { "keys": ["super+d"], "command": "find_under_expand" },

{ "keys": ["ctrl+d"], "command": "godef" },

ちなみにコレを追加しておくと、JumpBackもしてくれるそうです。

ショートカットキーの重複を確認しておくといいです2


Default(OSX).sublime-keymap

  { "keys": ["ctrl+j"], "command": "jump_forward"},

{ "keys": ["ctrl+k"], "command": "jump_back"},


使用方法

ジャンプしたい関数にカーソルを合わせて、ctrl + d で定義ジャンプします。


SublimeLinter

Sublimeで各言語のLinterを動かすベースとなるプログラムです。


設定ファイル

メニュー -> Sublime Text -> Preference -> Package Settings -> SublimeLinter -> Settings - User


SublimeLinter.sublime-settings

{

"user": {
"debug": false,
"delay": 0.25,
"error_color": "D02000",
"gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
"gutter_theme_excludes": [],
"lint_mode": "load/save",
"linters": {
"golint": {
"@disable": false,
"args": [],
"excludes": []
},
"gotype": {
"@disable": false,
"args": [],
"excludes": []
}
},
"mark_style": "solid underline",
"no_column_highlights_line": false,
"passive_warnings": false,
"paths": {
"linux": [],
"osx": [
"/path/to/gopath/bin/"
],
"windows": []
},
"python_paths": {
"linux": [],
"osx": [],
"windows": []
},
"rc_search_limit": 3,
"shell_timeout": 10,
"show_errors_on_save": true,
"show_marks_in_minimap": true,
"syntax_map": {
"html (django)": "html",
"html (rails)": "html",
"html 5": "html",
"php": "html",
"python django": "python"
},
"warning_color": "DDB700",
"wrap_find": true
}
}

色々書いてありますが、見るべき箇所は数点です


paths

"paths": {"osx": ["/path/to/gopath/bin/"] には、$GOPATH/bin/を指定します。

設定しないとLinterが動きません。

フルパスで書いておきます。


lintの表現



  • lint_mode: いつLinterを動かすか


  • mark_style: Lintのエラーをエディタ上でどう表現するか


  • show_errors_on_save: 保存時にLintのエラーを表示するか(Trueが本当にオススメです)

この3設定は、メニュー -> Tools -> SublimeLinter からも設定すると、設定値一覧がでてくるので便利です。


SublimeLinter-contrib-golint

goのlinterをまず導入します

$ go get -u github.com/golang/lint/golint

packageをインストールします。

SublimeText3を再起動してください。

コメントのないパブリック関数のfuncにオレンジのアンダーバーがあれば成功です。

kobito.1431054640.413542.png


GoToTest

Command + Shift + . で、プログラムファイル、テストファイルと交互に遷移します。

※プログラムファイル hoge.go に対して、テストファイル hoge_test.go が存在する場合のみ


Go Toggle Declare

このプラグインを入れると、shift + tab でカーソル行の :== へtoggleしてくれます。

暴力的なショートカットかと思いきや、実はgofmt, goimportsのおかげで、Goの開発ではtabやuntabを使いません。


最後に

これでうまく動かない場合はぜひコメ欄で教えて下さい。さらの状態のMacでトライしておりませんで。。





  1. goimports とは gofmtにpackageのインポート・アンインポートをつけた拡張コマンドです。 



  2. Keymaps で、キーバインドのチートシートが作れます。このプラグインは変数のキャメル・スネークケースの変換などが入っていてオススメです。