今天对 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 目录,会好些。
大功告成!看下跳转的输出日志,通过 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 =================