hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

go言语环境vim设置详解_后端开发

2020-01-01后端开发ki4网30°c
A+ A-

一、环境预备:

体系环境申明:

[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'

在Vim内实行:PluginInstall,

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并实行:PluginInstall

装置完后,下面的提醒栏提醒:

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 yum 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'

保留,退出vim

翻开vim,实行:PluginInstall

编辑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反向切换占位符。

四、.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>"

更多golang学问请关注golang教程栏目。

以上就是go言语环境vim设置详解的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
go言语环境vim设置详解_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>