前言
Vim-go
是当前使用最为广泛的用于搭建Golang
开发环境的vim插件,这里我同样使用vim-go作为核心和基础进行环境搭建的。vim-go利 用开源Vim插件管理器安装,gmarik/Vundle.vim
是目前被推荐次数更多的Vim插件管理器,超过了pathogen
。这里我们 就用vundle来作为Vim的插件管理工具。
准备一个编辑Go源码的测试源文件:
//test.go
package main
import "fmt"
func main() {
fmt.Println("Hello Golang!")
}
安装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'
Plugin 'fatih/vim-go'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
此时Vim仅安装了Vundle.vim这一个插件。编辑test.go时与编辑普通文本文件无异,一切都还是Vim的默认属性。
安装Vim-go
编辑~/.vimrc
,在vundle#begin
和vundle#end
间增加一行:
Plugin 'fatih/vim-go'
在Vim内执行 :PluginInstall
,
Vundle.vim会在左侧打开一个Vundle Installer Preview
子窗口,窗口下方会提示:Processing 'fatih/vim-go'
,待安装完毕后,提示信息变成Done!
。
这时,我们可以看到.vim/bundle
下多了一个vim-go
文件夹:
$ ls .vim/bundle/
vim-go/ Vundle.vim/
此时,再次编辑test.go,语法高亮有了, 保存时自动format(利用$GOBIN/gofmt
)也有了,但其他高级功能,比如自动import缺失的 package、自动补齐仍然没有,我们还要继续安装一些东东。
安装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
后,我们来看看哪些特性被支持了。
再次编辑test.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]。
原文链接:Golang开发环境搭建-Vim篇