Golang开发环境搭建-Vim篇

Golang开发环境搭建-Vim篇

  • 转自:http://tonybai.com/2014/11/07/golang-development-environment-for-vim/

虽说sublimetext3+gosublime+gocode是目前较为 流行的Golang开发环境组合,但作为一名VIMer,没有一套得心应手的Vim for Golang dev心里总是过不去的。Golang虽然年轻,但即便是从Go 1版本发布(2012年3月28日)算起,掐指算来也有小三年了。全世界的开发者已经为Golang贡献了较为成熟的Vim插件了。有了这些插件,搭建出 一套高效的Golang开发环境还是不难的,网上也有大量的资料可以参考,其中就有vim-go作者自己发表的一篇文章《Go development environment for Vim》。不过看别人 写的与自己搭建体验的还是有大不同的,于是想来想去还是把整个过程记录下来。

一、一个干净的环境

找个干净的基础环境,方便确认每个搭建步骤后的效果:

Ubuntu 14.04 x86_64

vim version 7.4.52

go version go1.4beta1 linux/amd64

再准备一个编辑Go源码的测试源文件:

//hellogolang.go

package main

import "fmt"

func main() {

fmt.Println("Hello Golang!")

}

用于验证每个搭建步骤后的变化。

二、严格按照vim-go的官方说明逐一搭建

Vim-go是当前使用最为广泛的用于搭建Golang开发环境的vim插件,这里我同样使用vim-go作为核心和基础进行环境搭建的。vim-go利 用开源Vim插件管理器安装,gmarik/Vundle.vim是目前被推荐次数更多的Vim插件管理器,超过了pathogen。这里我们 就用vundle来作为Vim的插件管理工具。

1、安装Vundle.vim

Vundle.vim的安装步骤如下:

mkdir ~/.vim/bundle

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

创建~/.vimrc文件(如果你没有这个文件的话),在文件顶部添加有关Vundle.vim的配置:

set nocompatible              " be iMproved, required

filetype off                  " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" let Vundle manage Vundle, required

Plugin ‘gmarik/Vundle.vim‘

" All of your Plugins must be added before the following line

call vundle#end()            " required

filetype plugin indent on    " required

此时Vim仅安装了Vundle.vim这一个插件。编辑hellogolang.go时与编辑普通文本文件无异,一切都还是Vim的默认属性。

2、安装Vim-go

编辑~/.vimrc,在vundle#begin和vundle#end间增加一行:

Plugin ‘fatih/vim-go‘

在Vim内执行 luginInstall,

Vundle.vim会在左侧打开一个Vundle Installer Preview子窗口,窗口下方会提示:“Processing ‘fatih/vim-go‘”,待安装完毕后,提示信息变 成“Done!”。

这时,我们可以看到.vim/bundle下多了一个vim-go文件夹:

$ ls .vim/bundle/

vim-go/  Vundle.vim/

此时,再次编辑hellogolang.go,语法高亮有了, 保存时自动format(利用$GOBIN/gofmt)也有了,但其他高级功能,比如自动import缺失的 package、自动补齐仍然没有,我们还要继续安装一些东东。

3、安装go.tools Binaries

vim-go安装说明中提到所有必要的binary需要先安装好,比如gocode、godef、goimports等。

通过:GoInstallBinaries,这些vim-go依赖的二进制工具将会自动被下载,并被安装到$GOBIN下或$GOPATH/bin下。(这个工具需要依赖git或hg,需要提前安装到你的OS中。)

:GoInstallBinaries的执行是交互式的,你需要回车确认:

vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin

vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/

vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/

vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/

vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/

vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/

vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/

不过这些代码多在code.google.com上托管,因此由于众所周知的原因,vim-go的自动安装很可能以失败告终,这样就需要你根据上 面日志中提到的各个工具的源码地址逐一去下载并本地安装。无法搭梯子的,可以通过http://gopm.io 下载相关包。

安装后,$GOBIN下的新增Binaries如下:

-rwxr-xr-x  1 tonybai tonybai  5735552 11??  7 11:03 errcheck*

-rwxr-xr-x  1 tonybai tonybai  9951008 11??  7 10:33 gocode*

-rwxr-xr-x  1 tonybai tonybai  5742800 11??  7 11:07 godef*

-rwxr-xr-x  1 tonybai tonybai  4994120 11??  7 11:00 goimports*

-rwxr-xr-x  1 tonybai tonybai  5750152 11??  7 11:03 golint*

-rwxr-xr-x  1 tonybai tonybai  6381832 11??  7 11:01 gorename*

-rwxr-xr-x  1 tonybai tonybai  2954392 11??  7 10:38 gotags*

-rwxr-xr-x  1 tonybai tonybai  9222856 11??  7 11:01 oracle*

安装好这些Binaries后,我们来看看哪些特性被支持了。

再次编辑hellogolang.go:

- 新起一行输入fmt.,然后ctrl+x, ctrl+o,Vim 会弹出补齐提示下拉框,不过并非实时跟随的那种补齐,这个补齐是由gocode提供的。

– 输入一行代码:time.Sleep(time.Second),执行:GoImports,Vim会自动导入time包。

– 将光标移到Sleep函数上,执行:GoDef或命令模式下敲入gd,Vim会打开$GOROOT/src/time/sleep.go中 的Sleep函数的定义。执行:b 1返回到hellogolang.go。

– 执行:GoLint,运行golint在当前Go源文件上。

– 执行:GoDoc,打开当前光标对应符号的Go文档。

– 执行:GoVet,在当前目录下运行go vet在当前Go源文件上。

– 执行:GoRun,编译运行当前main package。

– 执行:GoBuild,编译当前包,这取决于你的源文件,GoBuild不产生结果文件。

– 执行:GoInstall,安装当前包。

– 执行:GoTest,测试你当前路径下地_test.go文件。

– 执行:GoCoverage,创建一个测试覆盖结果文件,并打开浏览器展示当前包的情况。

– 执行:GoErrCheck,检查当前包种可能的未捕获的errors。

– 执行:GoFiles,显示当前包对应的源文件列表。

– 执行:GoDeps,显示当前包的依赖包列表。

– 执行:GoImplements,显示当前类型实现的interface列表。

– 执行:GoRename [to],将当前光标下的符号替换为[to]。

三、其他插件

到目前为止,我们还有若干特性没能实现,重点是:

– 实时跟随的代码补齐

– Code Snippet support

1、安装YCM(Your Complete Me)

在~/.vimrc中添加一行:

Plugin ‘Valloric/YouCompleteMe‘

保存退出后,再打开~/.vimrc并执行 luginInstall。

安装完后,下面的提示栏提示:

ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!

似乎YCM是用了C++编写的模块对性能进行优化了,于是需要手工编译YCM的support库。步骤如下:

sudo apt-get install build-essential cmake python-dev

cd ~/.vim/bundle/YouCompleteMe

./install.sh

构建(编译C++很慢,需要耐心的等一会)ok后,再打开hellogolang.go,逐字的实时补全功能就具备了!Cool!

2、安装 UltiSnips

Vim-go默认是用ultisnips引擎插件,但这个插件需要单独安装。

同样,我们利用vundle来安装它,在~/.vimrc中添加一行:

Plugin ‘SirVer/ultisnips‘

snippet和snippet引擎是分开的。ultisnips是引擎,vim-go的go snippet定义在这里

https://github.com/fatih/vim-go/blob/master/gosnippets/snippets/go.snip

编辑hellogolang.go,按照go.snip中的说明,我们输入func后敲击tab键,我们发现期待的:

func name(params) type {

}

并没有出现。反倒是YCM的下拉提示显示在那里让你选择。似乎是ultisnips和YCM的键组合冲突了。ultisnips官方说明也的确如
此。ultisnips默认是用Tab展开snippet的,而YCM中的Tab用来选择补齐项,我们可以通过设置来避免这些。

我们在.vimrc中添加如下setting:

" YCM settings

let g:ycm_key_list_select_completion = [‘‘, ‘‘]

let g:ycm_key_list_previous_completion = [‘‘]

let g:ycm_key_invoke_completion = ‘<C-Space>‘

" UltiSnips setting

let g:UltiSnipsExpandTrigger="<tab>"

let g:UltiSnipsJumpForwardTrigger="<c-b>"

let g:UltiSnipsJumpBackwardTrigger="<c-z>"

这样让YCM通过回车和向下的箭头来做list item正向选择,通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。

而ultisnips则是用tab做snippet展开,ctrl+b正向切换占位符,ctrl+z反向切换占位符。

3、安装molokai theme

Molokai theme是TextMate的theme的vim port,看着截图挺不错的,于是也安装了一下。

mkdir ~/.vim/colors

下载或copy https://github.com /fatih/molokai/blob/master/colors/molokai.vim到~/.vim /colors目录下

在.vimrc添加一行:colorscheme molokai

四、.vimrc

前面讲到了vim-go有许多命令,在:xx模式下执行多显不便,于是你可以定义一些Mappings,比如:

" set mapleader

let mapleader = ","

" vim-go custom mappings

au FileType go nmap <Leader>s <Plug>(go-implements)

au FileType go nmap <Leader>i <Plug>(go-info)

au FileType go nmap <Leader>gd <Plug>(go-doc)

au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)

au FileType go nmap <leader>r <Plug>(go-run)

au FileType go nmap <leader>b <Plug>(go-build)

au FileType go nmap <leader>t <Plug>(go-test)

au FileType go nmap <leader>c <Plug>(go-coverage)

au FileType go nmap <Leader>ds <Plug>(go-def-split)

au FileType go nmap <Leader>dv <Plug>(go-def-vertical)

au FileType go nmap <Leader>dt <Plug>(go-def-tab)

au FileType go nmap <Leader>e <Plug>(go-rename)

这样我们在命令模式下,输入<,>+<r>就是运行 当前main包,以此类推。

另外下面这个配置使得我们在save file时既可以格式化代码,又可以自动插入包导入语句(或删除不用的包导入语句)。

" vim-go settings

let g:go_fmt_command = "goimports"

到这里,我们的Vim Golang开发环境就基本搭建好了。snippet+实时补齐让你Coding如飞!

五、附录:.vimrc文件

下面是截至目前为止全量.vimrc文件的内容:

set nocompatible              " be iMproved, required

filetype off                  " required

colorscheme molokai

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" let Vundle manage Vundle, required

Plugin ‘gmarik/Vundle.vim‘

Plugin ‘fatih/vim-go‘

Plugin ‘Valloric/YouCompleteMe‘

Plugin ‘SirVer/ultisnips‘

" All of your Plugins must be added before the following line

call vundle#end()            " required

filetype plugin indent on    " required

" set mapleader

let mapleader = ","

" vim-go custom mappings

au FileType go nmap <Leader>s <Plug>(go-implements)

au FileType go nmap <Leader>i <Plug>(go-info)

au FileType go nmap <Leader>gd <Plug>(go-doc)

au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)

au FileType go nmap <leader>r <Plug>(go-run)

au FileType go nmap <leader>b <Plug>(go-build)

au FileType go nmap <leader>t <Plug>(go-test)

au FileType go nmap <leader>c <Plug>(go-coverage)

au FileType go nmap <Leader>ds <Plug>(go-def-split)

au FileType go nmap <Leader>dv <Plug>(go-def-vertical)

au FileType go nmap <Leader>dt <Plug>(go-def-tab)

au FileType go nmap <Leader>e <Plug>(go-rename)

" vim-go settings

let g:go_fmt_command = "goimports"

" YCM settings

let g:ycm_key_list_select_completion = [‘‘, ‘‘]

let g:ycm_key_list_previous_completion = [‘‘, ‘‘]

let g:ycm_key_invoke_completion = ‘<C-Space>‘

" UltiSnips settings

let g:UltiSnipsExpandTrigger="<tab>"

let g:UltiSnipsJumpForwardTrigger="<c-b>"

let g:UltiSnipsJumpBackwardTrigger="<c-z>"

六、Mac OS X下Vim配置

1、MacVim替换

Mac OS X下的配置方法稍有不同,因为Mac下系统自带的Vim是7.3版本,YCM要求Vim 7.3.584+版本,因此我们需要安装MacVim以替代自带的Vim,目前MacVim最新版本是version 7.4.258,完全满足要求。在这里https://github.com/b4winckler/macvim/releases可以下载到最新的MacVim,下载后的MacVim可以通过如下步骤替换原Vim。

原Vim安装到/usr/bin/vim下。

MacVim解压后如下:

[[email protected] ~/Downloads/MacVim-snapshot-73]$ls

MacVim.app/    README.txt    mvim*

我们执行以下步骤即可完成vim替换工作:

sudo mv /usr/bin/vim /usr/bin/vim.bak //备份一下原vim

cp mvim /usr/local/bin/

sudo ln -s /usr/local/bin/mvim /usr/bin/vim

2、插件安装和配置

按照上面Linux Vim的插件安装步骤和配置方法我们来配置MacVim,配置后,我们发现除了molokai的colorscheme没有生效外,其余插件工作均正常。而所有.go文件打开,均无molokai方案的颜色高亮,甚至连一般的颜色高亮都没有了。经过不断调试,发现了一个解决方法,在~/.vimrc中添加几行代码即可:

syntax on

au BufRead,BufNewFile *.go set filetype=go

colorscheme molokai

但这几行配置代码如果放在~/.vimrc的前面,则UltiSnips会无法工作,我将其移到~/.vimrc文件的末尾,这样就不存在冲突了
(看来.vimrc的插件配置的先后顺序会对插件功能的正常使用有影响)。漂亮的molokai colorscheme也会展现出来!

? 2014, bigwhite. 版权所有.

时间: 2024-10-08 10:05:28

Golang开发环境搭建-Vim篇的相关文章

Golang开发环境搭建(Notepad++、LiteIDE两种方式以及martini框架使用)

本文介绍两种Golang的开发环境一种基于notepad++.另一种基于liteide. 1.下载Golang语言的pkg:http://golangtc.com/download 直接点击安装,一路next. 2.程序员必备神器notepad++开发Golang环境很简单 一次点击:插件->Plugin Manger->Show Plugin Manger,安装插件GOnpp,重启notepad++. 新建文件命名为hello.go用notepad++打开,拷贝如下代码: package m

golang开发环境搭建

软件环境 以windows环境为例 1.go1.3.3.windows-amd64.msi Go语言安装包,下载地址: 官方地址:https://golang.org/dl/ Golang中国地址:http://www.golangtc.com/download 2.Git-1.9.4-preview20140929.exe git版本管理工具,golang很多第三方包被托管在github上,git结合go get可以下载对应的代码包 下载地址:http://git-scm.com/downlo

windows下golang开发环境搭建(sublime text3 + gosublime + sublimeGDB)

最近开始学习go语言的相关开发教程,之前的工作都是在linux上完成居多,但是家里的电脑还是windows的系统. 在搜索了N多方案以及尝试了N多IDE后,决定还是使用sublime+gosublime插件 这一套东西作为家用学习的跑demo方案. 在此需要感谢go社区以及一众之前已经存在的搭建方法和文档,本页以记录一下自己的搭建过程为主o(∩_∩)o 哈哈 1. 安装go语言 官网地址:https://golang.org/  点击下载需要的平台的安装版本,推荐msi,下载完成之后,点击安装,

PyCharm Golang开发环境搭建(最方便快捷的GO语言开发环境)

IntelliJ太牛了.为了配置Go语言开发环境,折腾了半天,下IDE(Sublime Text,IntelliJ Idea),然后装Go插件.装Go插件还要下载插件项目源码,编译等等,Sublime还要输入python脚本,粘进去通不过,头疼. 突然悟出一个道理,如果你觉得当前手上的事情变得非常痛苦的时候,不是事情本身的问题,是你没找到好的解决方法的问题,或者说,“不是事情太痛苦,是你太笨了”. 在不停的装插件,尝试过程中,突然发现,PyCharm跟Idea一样,也是支持Go插件的,立马悟到,

【PHP】PHP开发环境搭建——windows篇(apache2.2.22+php5.3.29+mysql5.7)

一直有学习php的想法,也稍微弄过一点点php,以前是用xmpp或者wamp来实现这会让很多初学者盲目,不知道是啥.现在来搭建一遍开发环境,并且说明下每一个的用途. 1.下载apache的http server 官网:http://httpd.apache.org/ 下载:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi                       PHP官网:http://php.net/  下载:http://windows.php.net/

Linux下golang开发环境搭建

对于golang开发来说,Windows下可以用vscode或者liteide都不错,但是Linux下的开发也就只有vim了,所以怎么搞笑的利用vim进行golang开发呢? 参考官方推荐的一个插件:vim-go 安装步骤: vim-go的安装需要使用vim插件管理工具,我使用的是VundleVim,具体的安装操作按照该工具的readme来操作即可. 当vim-go安装完成之后,按照vim-go的readme里面的介绍,需要用到命令:GoInstallBinaries来安装需要用的工具,但是这里

Ego2014916001——golang开发环境搭建(支持交叉编译环境)

本文介绍在windows下面建立GO语言的开发环境.实现可以编译windows-386.linux-386.linux-arm平台的程序.这三种情况是有本人亲自测试通过的. 获取安装软件,均可直接安装到windows下面 http://download.csdn.net/detail/seek_0380/7924665 http://download.csdn.net/detail/seek_0380/7924689 http://download.csdn.net/detail/seek_03

VS code golang 开发环境搭建

安装go (1)下载go安装程序 下载地址:https://golang.org/dl/(墙内下载地址http://www.golangtc.com/download),如果是您的系统是windows32 位系统,请选择go1.6.2.windows-386.msi即可,如果想尝鲜可以安装go1.7beta2,1.7正式版要在8月1号发布 (2)下载后直接双击msi文件安装,默认安装在c:\go (3)安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 C:\Go\b

【环境篇】搭建golang开发环境

学习一门语言,很多人都会是从搭建环境开始.有的语言的环境比较复杂,而有的语言环境很简单.对于go而言,说简单,的确不难,但有些概念需要先对其有所理解,才知道为什么这么用.网上对于怎么搭建一个golang开发环境已有了很多的教程,在这里我会简单介绍,不做过多描述.本篇文章仅对一些概念进行介绍,以及分享对一些我本人搭建开发环境的心得与技巧,如有错误,欢迎指正和交流. 搭建golang环境 1.到golang下载地址下载对应环境的安装包或者源码,若是Linux环境的话,将源码包下载解压之后,放至/us