go语言环境vim配置详解

互联网 19-12-31

一、环境准备:

系统环境说明:

[root@docker golang]# cat /etc/redhat-release  CentOS Linux release 7.2.1511 (Core)  [root@docker golang]# uname -a Linux docker 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@docker golang]#

准备一个go文件,用于观察配置插件过程中的变化:

//hellogolang.go package main import "fmt" func main() {         fmt.Println("Hello Golang!") }

二、插件配置之路:

1、Vundle.vim:

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

配置vimrc:创建~/.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

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

这里我们 就用vundle来作为Vim的插件管理工具。

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

Plugin 'fatih/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]。

三、其他插件

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

1、安装YCM(Your Complete Me)

sudo yum install build-essential cmake python-dev cd ~/.vim/bundle/YouCompleteMe ./install.sh

2、安装 UltiSnips

Plugin 'SirVer/ultisnips'
func name(params) type {  }
" 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来原地触发补齐提示。

四、.vimrc

 " 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包,以此类推。

 " 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>"

更多golang知识请关注golang教程栏目。

以上就是go语言环境vim配置详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Go
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:golang判断字符是不是字母

相关资讯