今天對 GoSublime 插件自帶的跳轉不滿意,創建的對象的方法或屬性無法跳過去。搜索后無意中發現 招牌瘋子 寫的 《Godef for Sublime 發布》。非常高興,按 https://github.com/buaazp/Godef 上搞了一遍。
先是 安裝 https://github.com/rogpeppe/godef godef 工具!
go get -v github.com/rogpeppe/godef
依賴 "9fans.net/go/acme" ,但是下載的時候失敗,github 上有,就從 github 下過來放到 gopath 的 src 目錄下。
然后編譯安裝 godef, godef.exe 生成在 go/bin 目錄下。
cd $GOPATH/src/github.com/rogpeppe/godef
go clean -r -i
go install -v
接下來就是苦逼的過程,一直無法跳轉,我以為是快捷鍵沖突之類的問題,試了好多仍然無效。我又猜測是不是要升級到 sublime text 3 版本。好吧,升上來,安裝 Package Control , 安裝 GoSublime 插件,安裝 godef 插件。還是一樣。
我打開 Godef 插件目錄,看了下他的 Godef.py 代碼。看到下面的 godef 路徑代碼,我想要是能看見插件的 print 打印就好了!是的,這時候得用程序員的思路解決問題,看調試日志!
systype = platform.system()
# print("[Godef]DEBUG: system type: %s" % systype)
if systype == "Windows":
godefCmd = "godef.exe"
else:
godefCmd = "godef"
gopaths = gopath.split(os.pathsep)
for go_path in gopaths:
godefpath = os.path.join(go_path, "bin", godefCmd)
if not os.path.isfile(godefpath):
print("[Godef]WARN: godef not found at %s" % godefpath)
continue
else:
found = True
break
if not found:
print("[Godef]ERROR: godef not found!")
print("=================[Godef] End =================")
return
print("[Godef]INFO: using godef: %s" % godefpath)
琢磨了一樣,在 Sublime -> View 中點擊 show Console , 發現果然找不到 godef.exe 文件!原因大白於天下!作者使用 gopath + "bin" + godef.exe 作為 godef.exe 的文件路徑。 可是我環境變量中設置的 gopath 是這個路徑: C:\go\bin;D:\development\go\go-example !多了一個 bin。
Package Control: Skipping automatic upgrade, last run at 2015-12-19 17:56:26, next run at 2015-12-19 18:56:26 or after
recreating index
reloading Packages/User/Preferences.sublime-settings
reloading Packages/User/Preferences.sublime-settings
=================[Godef]Begin=================
[Godef]WARN: godef not found at C:\go\bin\bin\godef.exe
[Godef]WARN: godef not found at D:\development\go\go-example\bin\godef.exe
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 535, in run_
return self.run()
File "C:\Users\yinfeng\AppData\Roaming\Sublime Text 3\Packages\Godef\Godef.py", line 42, in run
if not found:
UnboundLocalError: local variable 'found' referenced before assignment
有兩種解決方法,修改 godef 插件的 gopath 目錄為 C:\go。 即修改 Package setting 中 godef 的配置文件。
{
// Copy this file to Settings - User
// Set your real GOPATH in user's Godef.sublime-settings
// For example:
// "goroot": "/Users/zippo/Go",
// "gopath": "/Users/zippo/develop/GO"
// or if you use windows
//"goroot": "C:\\Go",
//"gopath": "C:\\gopath"
}
但上面這種方法怪怪的。放棄。調整 gopath 目錄,會好些。
- 為此我創建了一個新的 C:\gopath 目錄。把 之前的 C:\go\bin 目錄下的 src pkg 移動到新的 gopath 目錄下。修改 GOPATH 環境變量為 C:\gopath;D:\development\go\go-example 。重新編譯安裝 godef.exe ,我發現 godef.exe 是在 GOROOT/bin 即C:\go\bin 生成。但 GoDef.py 的代碼是通過 GOPATH 來查找的,所以我把 godef.exe 移動到 GOPATH /bin 目錄下。
大功告成!看下跳轉的輸出日志,通過 godef.exe 輸出要跳轉的文件和行列信息,原來如此!
=================[Godef]Begin=================
[Godef]INFO: using godef: C:\gopath\bin\godef.exe
[Godef]INFO: selcet_begin: 1600 offset: 1660
[Godef]INFO: spawning: C:\gopath\bin\godef.exe -f D:\development\go\go-example\src\example\test\net\httpserver\photoweb\photoweb.go -o 1660
[Godef]INFO: godef output: b'C:\\Go\\src\\net\\http\\request.go:970:19\n'
[Godef]INFO: opening definition at C:\Go\src\net\http\request.go:970:19
=================[Godef] End =================