本文由 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:检测文件类型