本文记录基于vim搭建go开发环境的过程。
更新vim (1)
由于vim-go插件在vim7.4上有bug,所以先把vim更新到vim8.1。准备好源码包vim-8.1.tar.bz2。
卸载vim7.4 (1.1)
1 | # rpm -qa | grep vim |
安装vim8.1 (1.2)
vim依赖ncurses需要事先安装。另外由于后面的YouCompleteMe依赖python,所以这里编译vim8.1的时候要加上python和python3支持。先安装python-devel和python3-devel。
1 | # yum install -y ncurses.x86_64 ncurses-devel.x86_64 |
需要说明的是:
--enable-multibyte
是为了打开多字节支持,否则在Vim中不能输入中文。--enable-fail-if-missing
使得configure发现缺失依赖,就立即失败,而不是继续运行。- 如此安装之后,vim8.1的runtime dir就是/usr/local/vim8.1/share/vim/vim81。
把vim的路径加入PATH,然后确认一下python被支持:
1 | # vim --version | grep python |
安装go (2)
下载go语言包go1.11.2.linux-amd64.tar.gz,并解压到/usr/local/go1.11.2.linux-amd64。然后配置GOROOT,GOPATH和PATH。
1 | # mkdir -p /home/workspace/go |
安装vim插件管理工具Vundle (3)
1 | mkdir -p ~/.vim/bundle |
创建一个空的~/.vimrc文件,并添加如下内容:
1 | "=========================== begin: Vundle settings =========================== |
然后,执行
1 | # vim +PluginInstall |
vim个性化配置 (4)
根据自己的习惯,为vim做一些个性化配置。例如,我在~/.vimrc末尾append如下内容:
1 | "=================begin: general vim settings================================= |
vim-go插件 (5)
安装vim-go (5.1)
有了第3节安装的vim插件管理工具Vundle,很容易安装vim-go。
在~/.vimrc中的Vundle配置里加入:
1
Plugin 'fatih/vim-go'
在~/.vim/bundle/目录下安装vim-go:
1
vim +PluginInstall
在$GOPATH/bin下安装二进制工具,并在$GOPATH/src/golang.org和$GOPATH/src/github.com下安装它们的源代码。
1
vim +GoInstallBinaries
这一步比较慢,并且若没有科学上网,golang.org/x/下的东西都会失败。可以手动安装它们:
1 | mkdir -p $GOPATH/src/golang.org/x/ |
然后再通过vim +GoInstallBinaries
安装其他工具。
配置vim-go (5.2)
vim-go提供的功能:
- 输入fmt.然后按ctrl+x, ctrl+o,vim会弹出补齐提示下拉框。这个补齐是由gocode提供的。不过这个补齐比较麻烦,后面YouCompleteMe会提供更加方便的补齐。
- 输入代码:
time.Sleep(time.Second)
并执行:GoImports,vim会自动导入time package。 - 执行:GoDef,vim会打开光标下的标识符的定义。
- 执行:GoDoc,vim会打开光标下的标识符的文档。
- 执行:GoLint,vim会在当前go源文件上运行golint。
- 执行:GoVet,vim会在在当前目录下运行go vet。
- 执行:GoRun,vim会编译当前package并运行它的main。
- 执行:GoBuild,vim会编译当前package。GoBuild不产生结果文件。
- 执行:GoInstall,vim会安装当前package。
- 执行:GoTest,vim会运行当前路径下的test.go文件。
- 执行:GoCoverage,vim会创建一个测试覆盖结果文件,并打开浏览器展示当前package的情况。
- 执行:GoErrCheck,vim会检查当前package里可能的未捕获的errors。
- 执行:GoFiles,vim会显示当前package对应的源文件列表。
- 执行:GoDeps,vim会显示当前package的依赖列表。
- 执行:GoImplements,vim会显示当前类型实现的interface列表。
- 执行:GoRename [to],将当前光标下的标识符remame为[to]。
我们在~/.vimrc中为一些常用的工具设置快捷map:
1 | "=================== begin: vim-go settings =================== |
YouCompleteMe (6)
首先确认vim已经支持了python,否则,安装了YouCompleteMe之后每次运行vim都会报错:
1 | YouCompleteMe unavailable: requires Vim compiled with Python (2.7.1+ or 3.4+) support |
安装YouCompleteMe (6.1)
和安装vim-go插件一样,先在/.vimrc中的Vundle配置里加入:/.vim/bundle里了。但是,和vim-go不同的是,YouCompleteMe还需要进一步的安装。在 ~/.vim/bundle/YouCompleteMe/有一个install.py脚本,我们需要运行这个脚本来完成安装。为支持不同的语言,可以给这个脚本提供不同的选项,例如:Plugin 'Valloric/YouCompleteMe'
,然后执行:vim +PluginInstall
。这就把YouCompleteMe安装到--go-completer
,--java-completer
,--clang-completer
等。这里我使用--all
选项,支持所有常见语言。这样依赖也是最多的。下面先安装依赖,然后运行脚本。
1 | # yum install -y cmake |
配置YouCompleteMe (6.2)
在~/.vimrc中加入:
1 | "=================== begin: YCM settings =================== |
UltiSnips (7)
首先在~/.vimrc中的Vundle配置里加入:Plugin 'SirVer/ultisnips'
,然后执行:vim +PluginInstall
。需要注意的是,UltiSnips默认使用tab键进行补全,但是YouCompleteMe也使用tab键。所以,我们必须重新设置一个键。如下所示,我设置的是Ctrl-h。
1 | "=================== begin: UltiSnips setting =================== |
tagbar (8)
tarbar依赖前面vim-go提供的gotags和ctags。所以,要先安装ctags,然后在~/.vimrc中的Vundle配置里加入:Plugin 'majutsushi/tagbar'
,最后再次执行:vim +PluginInstall
。配置如下:
1 | "=================== begin: go-tagbar setting =================== |
总结 (9)
记录一下配置go开发环境的过程,方便日后查询。