最好用的编辑器之一:Vim-Go环境搭建
本文由Librant发表
如果说在Linux环境下,什么编辑器最好用,如果我说是VIM,估计会有一大部分人嗤之以鼻,怎么可能。VIM可能是他用过众多编辑器最难用的一个。在我司用的是云虚拟机,说实话吧,这里吐槽一下,是真的卡,没开几个网页,打开几个软件就卡的不要不要的,后来码代码的时候,能用Linux机器我就尽量使用Linux环境,如果读者正好也是一名Gopher的话,那我就强烈建议你使用VIM,Vim-go是当前使用最为广泛的用于搭建Golang开发环境的vim插件。好了,废话不多说,看我搭建好的界面吧。
图 Go-Vim界面
看到这个界面,读者是不是不认识了,这就对了,是不是觉得很炫酷,其实Vim有很多的插件,可以把Vim打造的非常棒,等读者查阅相关资料,清楚Vim的各种参数的时候,就可以根据自己的喜好,搭建不同风格的Go开发环境啦。So废话不多说,开整。(建议先看完《跟我学Docker》的第一章部分)
1.1 环境准备
能成功从gitHub拉取代码,Go编译器安装完成之后,就可以在搭建Go-Vim啦。首先是在当前用户的HOME目录下创建 .vim 目录和 .vimrc 文件:
librant@ubuntu:~$ mkdir .vim
librant@ubuntu:~$ touch .vimrc
创建完成之后,进入到 .vim 中,下载插件 Vim 的插件管理器bundle:
librant@ubuntu:~/.vim$ mkdir bundle
然后进入到 bundle 目录中,安装Vundle.vim:
librant@ubuntu:~/.vim/bundle$ git clone git clone https://github.com/VundleVim/...
下载完成之后,会在当前目录下生成 Vundle.vim 目录
同样进入到 bundle 目录中,安装Vim-go:
librant@ubuntu:~/.vim/bundle$ git clone https://github.com/fatih/vim-...
下载完成之后,会在当前目录下生成 vim-go 目录
1.2 插件安装
~/(用户$HOME) 目录下已经有 .vimrc文件就不需要再创建了。(" 为注释部分)。
1.2.1 安装Vundle.vim
在 .vimrc 文件中添加如下配置:
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
call vundle#end()
filetype plugin indent on
保存后,退出。
1.2.2 安装Vim-go
继续编辑 .vimrc文件,在call vundle#begin()和call vundle#end()之间再添加如下配置:
Plugin 'fatih/vim-go'
保存后,重新打开 vim 编辑器,在命令行的模式输入:PluginInstall
:PluginInstall
执行之后会在左侧出现需要安装的插件列表,右侧是.vimrc文件。如图1-2-2所示:
图 1-2-2 Vim插件安装界面
刚执行时,左下角会出现 Processing的过程,需要稍微等一会儿,这是在下载代码,安装完成之后,左下角将出现Done!的单词,表示已经安装完成。
1.2.3 安装 go.tools Binaries
Vim-go安装中需要使用到Go的相关的二进制工具。由于历史的原因,在google上的工具是无法自行下载安装的,在gitHub上的工具是可以安装成功的。
首先打开 .vimrc 文件,切换到命令行模式,执行 GoInstallBinaries 命令自行安装。
:GoInstallBinaries
等待 Vim-go依赖的工具自动安装,如果安装成功后,会在 $GOPATH/bin 目录下生成。安装完成后如图1-2-3所示:
图 1-3-2 vim-go依赖的命令文件
由于有些命令文件是无法自动安装完成,这就需要手动进行安装啦。首先对比目录,看缺少哪些命令没有安装完成,然后去gitHub上搜索,找到对应的命令源码之后,使用git clone 下载到本地,然后使用 go install命令进行安装即可。前面已经讲解过如何安装啦,这里就不再赘述。
相关工具的gitHub路径:
golint: https://github.com/golang/lin...
gocode: https://github.com/nsf/gocode...
errcheck: https://github.com/kisielk/er...
gotags: https://github.com/jstemmer/g...
(缺少什么工具,基本都可以找到的,这里就不一一列举了)
1.3 VIM主题颜色
Vim的主题颜色保存在 /usr/share/vim/vim80/colors 目录下保存,如果目录下没有的主题,就需要自己进行下载了。下载到此目录的颜色主题,将可以被所有用户使用,如果只需要在当前用户下使用,可以将下载的主题放在 ~/.vim/colors 目录下即可。个人比较喜欢molokai主题风格,下面就简单介绍如何下载这个主题吧。
1)在gitHub上搜索 molokai 主题,找到主题的git仓库 tomasr/molokai
2)进入到 .vim目录下,使用git clone 下载主题
librant@ubuntu:~/.vim$ git clone https://github.com/tomasr/mol...
3)下载完成之后,拷贝 molokai/colors/molokai.vim 文件到 ~/.vim/colors 目录下
4)配置 .vimrc 文件,在文件中红添加如下信息:
set t_Co=256
colorscheme molokai
let g:molokai_original = 1
let g:rehash256 = 1
需要配置其他的主题,只需要设置相应的主题名称。
1.4 其他插件安装
1.4.1 SirVer/ultisnips
UltiSnips是Vim的代码片段工具,它只是一个引擎,它需要和vim-snippets搭配使用。vim-snippets预定义了几十种语言常用的代码模板,位于 ~/.vim/bundle/vim-snippets/UltiSnips/,UltiSnips 有一套自己的代码模板语法规则。
在 .vimrc中的配置如下:
Plugin 'honza/vim-snippets'
Plugin 'SirVer/ultisnips'
"插入模式下直接通过<C-z>键来触发UltiSnips的代码块补全
let g:UltiSnipsExpandTrigger="<C-z>"
"弹出UltiSnips的可用列表,由于不常用, 所以这里设置成了特殊的<C-i>映射
let g:UltiSnipsListSnippets="<C-i>"
"<C-f>跳转的到下一个代码块可编辑区
let g:UltiSnipsJumpForwardTrigger="<C-f>"
"<C-b>跳转到上一个代码块可编辑区
let g:UltiSnipsJumpBackwardTrigger="<C-b>"
增加位置如Go-vim的位置一致,安装过程也是类似的。
gitHub的代码路径如下所示:
honza/vim-snippets: https://github.com/honza/vim-...
SirVer/ultisnips: https://github.com/SirVer/ult...
1.4.2 scrooloose/nerdtree
NERDTree的作用就是列出当前路径的目录树,一般IDE都是有的。可以方便的浏览项目的总体的目录结构和创建删除重命名文件或文件名。
在 .vimrc中的配置如下:
Plugin 'scrooloose/nerdtree'
" 设置NerdTree
map <F7> :NERDTreeMirror<CR>
map <F7> :NERDTreeToggle<CR>
进入到 vim 后可以按 F7 显示和隐藏 NERDTree区域。
gitHub的代码路径如下所示:
scrooloose/nerdtree: https://github.com/scrooloose...
1.4.3 majutsushi/tagbar
tagbar可以将正在编辑的文件生成一个大纲视图,包含接口/方法/变量等, 可以选中快速跳转到目标位置, 编辑大文件特别有用。
由于tagbar是基于ctags,需要先安装ctags:
root@ubuntu:/# apt-get install ctags
在 .vimrc中的配置如下:
"F9触发,设置宽度为30
let g:tagbar_width = 30
nmap <F9> :TagbarToggle<CR>
"开启自动预览(随着光标在标签上的移动,顶部会出现一个实时的预览窗口)
let g:tagbar_autopreview = 1
"关闭排序,即按标签本身在文件中的位置排序
let g:tagbar_sort = 0
进入到 vim 后可以按 F9 开启和关闭tagbar功能 。
gitHub的代码路径如下所示:
majutsushi/tagbar: https://github.com/majutsushi...
1.4.4 Raimondi/delimitMate
delimitMate是自动补全引号(单引号/双引号/反引号), 括号(()[]{})的插件。
在 .vimrc中的配置如下:
Plugin 'Raimondi/delimitMate'
gitHub的代码路径如下所示:
Raimondi/delimitMate: https://github.com/Raimondi/d...
GO语言调试利器——dlv
vim创建程序文件自动添加头部注释
附录:VIM参数设置解析
- set nocompatible:不要使用vi的键盘模式,而是vim自己的
- set number:显示行号
- set showcmd:输入的命令显示出来
- syntax on:开启语法高亮
- filetype on:检测文件类型