本文由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.git

下载完成之后,会在当前目录下生成 Vundle.vim 目录

同样进入到 bundle 目录中,安装Vim-go:

librant@ubuntu:~/.vim/bundle$ git clone https://github.com/fatih/vim-go.git

下载完成之后,会在当前目录下生成 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/lint.git

gocode: https://github.com/nsf/gocode.git

errcheck: https://github.com/kisielk/errcheck.git

gotags: https://github.com/jstemmer/gotags.git

(缺少什么工具,基本都可以找到的,这里就不一一列举了)

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/molokai.git

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

"插入模式下直接通过键来触发UltiSnips的代码块补全

let g:UltiSnipsExpandTrigger=""

"弹出UltiSnips的可用列表,由于不常用, 所以这里设置成了特殊的映射

let g:UltiSnipsListSnippets=""

"跳转的到下一个代码块可编辑区

let g:UltiSnipsJumpForwardTrigger=""

"跳转到上一个代码块可编辑区

let g:UltiSnipsJumpBackwardTrigger=""

增加位置如Go-vim的位置一致,安装过程也是类似的。

gitHub的代码路径如下所示:

honza/vim-snippets: https://github.com/honza/vim-snippets.git

SirVer/ultisnips: https://github.com/SirVer/ultisnips.git

1.4.2 scrooloose/nerdtree

​ NERDTree的作用就是列出当前路径的目录树,一般IDE都是有的。可以方便的浏览项目的总体的目录结构和创建删除重命名文件或文件名。

​ 在 .vimrc中的配置如下:

Plugin 'scrooloose/nerdtree'

" 设置NerdTree

map :NERDTreeMirror

map :NERDTreeToggle

进入到 vim 后可以按 F7 显示和隐藏 NERDTree区域。

gitHub的代码路径如下所示:

scrooloose/nerdtree: https://github.com/scrooloose/nerdtree.git

1.4.3 majutsushi/tagbar

​ tagbar可以将正在编辑的文件生成一个大纲视图,包含接口/方法/变量等, 可以选中快速跳转到目标位置, 编辑大文件特别有用。

由于tagbar是基于ctags,需要先安装ctags:

root@ubuntu:/# apt-get install ctags

​ 在 .vimrc中的配置如下:

"F9触发,设置宽度为30

let g:tagbar_width = 30

nmap :TagbarToggle

"开启自动预览(随着光标在标签上的移动,顶部会出现一个实时的预览窗口)

let g:tagbar_autopreview = 1

"关闭排序,即按标签本身在文件中的位置排序

let g:tagbar_sort = 0

进入到 vim 后可以按 F9 开启和关闭tagbar功能 。

gitHub的代码路径如下所示:

majutsushi/tagbar: https://github.com/majutsushi/tagbar.git

1.4.4 Raimondi/delimitMate

​ delimitMate是自动补全引号(单引号/双引号/反引号), 括号(()[]{})的插件。

​ 在 .vimrc中的配置如下:

Plugin 'Raimondi/delimitMate'

gitHub的代码路径如下所示:

Raimondi/delimitMate: https://github.com/Raimondi/delimitMate.git

GO语言调试利器——dlv

vim创建程序文件自动添加头部注释

附录:VIM参数设置解析

  1. set nocompatible:不要使用vi的键盘模式,而是vim自己的
  2. set number:显示行号
  3. set showcmd:输入的命令显示出来
  4. syntax on:开启语法高亮
  5. filetype on:检测文件类型

最好用的编辑器之一:Vim-Go环境搭建的更多相关文章

  1. 我的vim开发环境搭建:C/C++/Go,持续更新中

    懒得在github博客上折腾评论功能,先借用博客园推广下,虽然好像也没什么用. 我的vim开发环境搭建(1): 准备工作 我的vim开发环境搭建(2): 常用的vim插件 我的vim开发环境搭建(3) ...

  2. Linux-- 文件编辑器 vi/vim(2)

    多文件编辑 vi 可以用来打开多个文件,如下: 进入编辑界面以后,输入 :n 可以切换到下一个文本,:N 可以切换到上一个文本,:files 列出目前这个 vi 打开的所有文件,举例如下: 切换到下一 ...

  3. 在PHPstorm编辑器中配置git环境

    在phpstorm编辑器中配置git环境,使得编程人员从git仓库中提交代码,克隆代码,,,更佳便利快捷,有利于提高项目的质量和效率 工具/原料   phpstorm编辑器,git客户端 win7或w ...

  4. Linux文本编辑器-vi/vim

    vi是Linux命令行界面下的文字编辑器,vim是vi的增强版(Vi IMproved),完全兼容 可以理解成普通的txt文本与word文档之间的差距. 注:还有一款全屏编辑器是nano,可以了解下 ...

  5. 文本编辑器 vi/vim 的使用

    文本编辑器 vi/vim 一.启动与退出 1. vim 2. vim 文件名(可以是存在的文件,也可以是不在的文件) 3.退出 :q   或者:x 在非“插入”模式二.vi/vim的工作模式 1.正常 ...

  6. Golang开发环境搭建-Vim篇

    一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...

  7. Linux-- 文件编辑器 vi/vim(1)

    初识 vi/vim 文本编辑器 1.vi 和 vim 相同,都是文本编辑器,在 vi 模式下可以查看文本,编辑文本,是 Linux 最常用的命令,vi 模式下分为三部分,第一部分一般模式,在一般模式中 ...

  8. Vim Python3环境打造

    Vim Python3环境打造 tags: Vim Python3 参考网址:Vim与Python真乃天作之合:打造强大的Python开发环境 分割布局 sv 纵向分割 vs 横向分割 ctrl+W ...

  9. Vim的环境设定与记录

    vim 会主动将曾经做过的行为记录下来,记录在文件   ~/.viminfo,好方便下次作业. 更改  /etc/vimrc配置操作环境 vim的环境设定参数 :set nu :set  nonu 设 ...

随机推荐

  1. java根据图片创建日期,或最后修改日期重命名

    import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...

  2. 浅谈React数据流管理

    引言:为什么数据流管理如此重要?react的核心思想就是:UI=render(data),data就是我们说的数据流,render是react提供的纯函数,所以用户界面的展示完全取决于数据层.这篇文章 ...

  3. Python的list循环遍历中,删除数据的正确方法

    在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...

  4. [转载]ECMall模板解析语法与机制

    ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...

  5. 从Typescript看原型链

    话不多说先来段代码 class Parent { private name:string; constructor(name) { this.name = name; } public getName ...

  6. peewee基本使用

    PEEWEE基本使用 Content Ⅰ  安装Ⅱ  链接数据库Ⅲ  建表 Ⅳ  增删改 Ⅴ  基础查询 Ⅵ  ForeignKey Ⅷ  事务 参考官方文档:http://docs.peewee-o ...

  7. 如果解决小程序1024kb渲染之坑

    问题: 在小程序开发中如果有那么个场景和操作步骤,获取商品下拉列表商品列表data为goodsList 当从后台获取数据response.data.list,通常我们会setData({goodsLi ...

  8. 进军微信小程序之准备工作

    小程序这么火,不去浪一浪怎么行?   更何况,现在微信“赦免”了个人认证,又更新了web开发工具,现在正是搞搞小程序的最佳时期! 那么一起来看看要做什么准备吧~   官方的文档很详细,可参考:小程序官 ...

  9. IntelliJ IDEA小问题通过操作软件解决

    Diamond types are not supported at this language level http://blog.csdn.net/qq_34884729/article/deta ...

  10. repo跟svn的区别

    Git与SVN区别 Git和SVN正好相反,git提倡开发时拉分支,各干各的,相互独立,发版本时打标签:而svn呢,平时大家都在主干上干活,发版本时拉个分支,所以呢,svn经常会提交冲突,经常要合并代 ...