基于Vim打造一个Go开发环境

最近开始学习使用Go,真心意识到工具就是生产力,特别是对于对于一门新的语言来说。 自己琢磨了几天,又经xiaoqiang同学提点,算是折腾了一个比较顺手的环境,总结一下。

首先说,我觉得写程序需要的一个基本环境包括:

  • 顺手的文本编辑器(语法加亮,定义跳转,语法检查,自动补全与提示)
  • 查询方便的文档
  • 然后为了效率,我们还需要一个方便的功能,那就是常用代码snippet的展开功能。

编辑器方面,因为一直用的Vim,自然是接着用,好在Go官方的发布包里就提供了相关的Vim插件。假设你是使用Homebrew安装的Go。 直接将插件所在路径导入Vim的run time path就行,修改~/.vimrc:

set rtp+=/usr/local/Cellar/go/1.1/misc/vim
au BufRead,BufNewFile *.go set filetype=go
filetype plugin indent on
syntax on

这样就有了语法加亮,定义跳转和文档查询的功能。但是语法检查还是比较弱的,好在go无论是编译还是运行都非常方便,只需要执行命令:

$ go run xxx.go

就行,所以简单修改一下键映射: 之前写C++的时候喜欢用\rm快捷键来编译:

nmap <leader>rm :!make -j4 1>/dev/null<CR>

同理映射一个go编译的快捷键\rg,只需同样在.vimrc里面加入:

nmap <leader>rg :!go run %<CR>

至于代码的自动补全,我觉得对于初学者来说简直太重要了.

我之前一直使用omnicomplete,但是这货的配置实在太恶心巴拉,用上Mac和Vundle之后,经xiaoqiang同学介绍,爱上了clang_complete,安装方法如下,依旧是.vimrc配置(本文后面的代码,如果没有$符号开头,都是写在.vimrc里面的配置):

"for clang_complete
let g:clang_use_library=1
Bundle 'Rip-Rip/clang_complete'

可惜的是,clang_complete默认并不能支持Go语言的自动补全, 不过好在有https://github.com/nsf/gocode这个好东西。 安装起来也很方便:

$ go get -u github.com/nsf/gocode

成功之后,在$GOPATH/bin下面应该会有一个叫做gocode的binary。之后再安装一个Vim的插件vim-gocode来使用他,我使用的Vim插件管理器是之前推荐过的Vundle,有了它,妈妈再也不怕我不会安装Vim插件了:

Bundle 'Blackrush/vim-gocode'

然后,理论上咱们就可以使用快捷键<C-x><C-o>来进行代码补全了,但这个操作太Emacs了,小拇指要抽筋的节奏,不过我会告诉你还有supertab这个插件嘛?

Bundle 'ervandew/supertab'

像bash一样直接tab代码补全,帅不帅?

然后轮到文档的查询,其实使用Go自带的Vim插件的:Godoc 命令就已经能够实现文档查询了,但是如何实现一个更好看更快的查询呢,想象一个飞速秒开的MSDN?

这里推荐一下Dash,也是xiaoqiang同学向我热力推荐,并忽悠我花50块人民币买的一个Mac软件,Dash是一个集合了非常多的语言和框架的手册的查询软件,更爽的是它可以和很多其他的软件集成使用,其中就包括Vim,配置也很方便,依然是使用Vundle:

Bundle 'rizzatti/funcoo.vim'
Bundle 'rizzatti/dash.vim'

然后我自己照着手册又剽了一些常用的代码片段,什么打印啦,定义函数,type,interface啦,新建http handler啦等等。这样就能够使用常用的代码片段快速搭建简单的程序了。 这里推荐另一个插件snipmate:

Bundle 'msanders/snipmate.vim'

最后我们打开Vim,安装之前配置这些插件的bundle:

$ vim +BundleInstall

Ok,看看效果。

最后分享一下自己的Vim files 配置,供参考。
lobatt/vim_files

本文网址:http://blog.perlfect.me/2013/07/13/go-coding-with-vim.html

comments powered by Disqus