BUAAZP.

Godef for Sublime发布

November 20, 2014

Godef for Sublime发布

@招牌疯子

问题来源

想必广大Golang开发者入门之后面临的第一个问题就是如何配置一个顺手的开发环境了吧,社区里提相关问题的帖子屡见不鲜,我自己也尝试过目前市面上最常用的几种方案,或多或少都有些不满,所以先逐个说一下在我使用过程中遇到的问题。

Sublime

最开始我用的是sublime text + gosublime,总体来说已经相当爽了,自动补全,自动导入包,美观的显示等等,对新手极其友好。但是,最关键的一点,是跳转定义这个功能太弱了,直接使用包名开头的方法和类,都可以准确跳转,但如果是自己实例化出来的对象,跳转定义就不行了。

这一点令我十分难受,因为实例化出来的对象在代码里一堆又一堆的,不能跳转非常影响效率。咨询了ASTA谢大之后,他说自己用的是LiteIDE,于是我也去尝试了一下。

LiteIDE

虽然是最专业的golang IDE,但是跟我完全不来电,第一是不支持vim模式,写代码要不停地移动鼠标来定位显然不能忍,第二,丑。再加上动不动就崩溃,卡,于是很快就被我pass了。

VIM

放弃了LiteIDE之后,我开始去vim里寻找答案,于是配了vim-go等插件,vim-go自带了godef,可以用gd快捷键直接跳转到任意函数、类、对象、成员定义的地方,godef简直是跳转定义最完美的方案。同时别的功能像goimport、gobuild、golint、gorename也都支持,如果你是vim重度用户,非常推荐用这一套方案。在本文最后我也将分享我自己的vim配置和插件。

但是,godef有个最大的问题是,跳转过去之后没有办法再跳回来。用过ctags的都知道ctrl+]ctrl+t组合,godef相当于只有ctrl+],实战中还是挺麻烦的,再加上一些小的瑕疵,比如虽然使用了molokai主题,还是不够好看,自动补全方法时不会补全参数列表等,导致我还是切回了sublime。

解决方案

于是我就一直设想,要是sublime支持godef来跳转,那就是一个完美的golang IDE了。然而不幸的是,gosublime作者明确表示不会支持godef,而采用go.tools/types来实现跳转功能的新版本依旧遥遥无期。

于是,我自己实现了一个简单的Godef 插件,可以和gosublime配合起来使用,既发扬了gosublime已有功能的优点,也彻底解决了精确跳转的问题。

使用方法

Godef插件目前支持Mac OS和Linux,在使用这个插件之前,你需要先安装godef程序:

go get -v code.google.com/p/rog-go/exp/cmd/godef  

插件已提交至Sublime Package Control中,你可以在package control里直接搜索godef来进行安装:

Godef In Package Control

安装完成之后需要配置一下GOPATH路径,通过菜单里的设置打开配置文件添加实际的GOPATH

{
    "gopath": "/Users/zippo/develop/GO"
}

到这就可以使用了,默认快捷键Mac下是super+d,Linux下是ctrl+d,只需要将光标定位到golang代码中任意方法,对象,成员上,按快捷键即可跳转到其精确的定义处。这下你就可以完全抛弃gosublime中自带的super+., super+g了。

为了方便跳出去再跳回来,强烈建议各位在自己的快捷键配置文件中添加如下两个快捷键:

{ "keys": ["super+j"], "command": "jump_forward"},
{ "keys": ["super+k"], "command": "jump_back"},

意思是用super+j/k来跳转到下一个或上一个位置。我一般是用super+d跳到函数或对象的定义处,看完相关的内容后直接按一个super+k就返回到了我之前的位置,效率极高。

当然了,设成jk是因为我习惯使用vim模式,你当然也可以自定义成左右箭头或上下箭头等快捷键。

自用VIM套件分享

我自己也是vim重度用户,在写go程序之前一直是用vim来进行开发;而且如果是要到服务器上进行远程开发的话,也只有vim这一个的办法,所以其实我也配了一套vim开发环境。你如果不是非要像我这样吹毛求疵的话,这套环境也是完全可以用得很爽了。先看截图:

vim

各个配置项都经过长期的实践和调整,基本上上手即用,安装方法和注意事项请参考Github主页的说明:

https://github.com/buaazp/vimconf

我这套vim使用Plug来管理和下载插件,安装之后按F6即可安装所需插件,如果要使用vim-go中的各项功能,进入vim后输入:GoInstallBinaries命令即可自动下载安装。

最后

为什么要对代码跳转这个小功能斤斤计较呢,那是因为无论使用Go标准库,还是不可避免地使用第三方库,如果能快速地进入其源码中查看具体的实现,不仅用的更放心,而且可以学到大量的东西,对你写代码能带来巨大的好处。

总之,欢迎入坑。

招牌疯子

Coder, OpenSource, DataStorageEngineer. Work@ByteDance
开源爱好者,zimg作者,大规模数据存储工程师。