vim for golang
还在抱怨vim没有好用的IDE吗?本文介绍一款vim插件管理利器Vundle,以及常用的vim插件。
- vim插件管理器Vundle
- 常用的vim插件
前期准备:
- 安装vim
sudo apt-get install vim
- 安装go
sudo apt install golang-go
- go环境配置
go安装好了,可以用go env看一下环境变量。
- GOROOT: 就是go的安装目录,一般不用改
- GOPATH: 可以理解为工作目录
- GOBIN:
GOPATH目录下,一般有三个子目录
—bin:可执行文件路径
—pkg:golang编译包时,生成的.a文件目录
—src:源码目录。
在~/目录下,把这必要环境变量写到文件.bash_profile中,如果没有.bash_profile,创建一个。
export GOPATH=/home/zdchu/go/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
使配置生效:
source ~/.bash_profile
一、vim插件管理器Vundle
Vundle是基于Git仓库的插件管理软件。Vundle将插件的安装简化为类似yum软件安装的过程
只要:PluginInstall插件就安装完了,:PluginClean之后插件就卸载了。
1. Vundle安装
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
2. vimrc配置
在.vimrc末尾,加上vundle配置:
set nocompatible " be iMproved, required
filetype off " required
" 启用vundle来管理vim插件
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin on
二、常用的vim插件
1. NERDTree------>文件目录树
-
简介
NERDTree是一个针对文件夹以目录树的形式呈现的插件。 -
配置
Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR> "F7打开NERDTree
let NERDTreeWinSize = 25 "窗口大小
let g:NERDTreeWinPos="left" "窗口在左侧
2. vim-go------>强大到可怕
- 简介
vim-go是针对go定制的强大插件。见vim-go github - 基本配置
Plugin 'fatih/vim-go'
安装好vim-go后,打开.go文件时,基础功能如语法高亮有了,保存时自动gofmt也有了,一些高级功能如自动Import缺失的package,自动补全,函数跳转等功能还没有,需要安装vim-go依赖库
- vim-go依赖库
用命令 :GoInstallBinaries安装。如果已经安装好了,可以用:GoUpdateBinaries更新。
在国内,一般是翻墙才能成功安装。
解决办法:先下载工具包,再安装
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/tools.git
git clone https://github.com/golang/lint.git
:GoInstallBinaries
成功安装在GOAPTH/bin目录下。
注:我们也可以去https://gopm.io/这里下载包。
强大的指导手册,一定要看哦
以上配置好,函数跳转godef等强大功能就可以用啦,但是你会发现函数和实例都是一个颜色,不能一眼就看出来哪个是函数,以下是高级配置
在这里插入代码片
2. YouCompleteMe—>实时自动补全
- 简介
写代码时,实时自动补全功能。YCM - 配置
Plugin 'Valloric/YouCompleteMe'
###2. Ctags------>函数跳
ctags:大多数 Unix 系统都能找到。只支持 C。只有基本的功能;
Exuberant_ctags:它支持 C、C++、Java、Fortran、Python、Eiffel、PHP等41种语言
总结来讲,Exuberant_ctags其它就是ctags的多语言实现。
安装:
sudo apt-get install exuberant-ctags
进入项目目录,执行:
ctags -R
注:在更新项目代码时,都要执行这句哦。
此时,在当前目录下生成一个tags文件,再执行
vim
: set tags = 项目目录/tags
该命令将tags文件加入到vim中来, 你也可以将这句话放到~/.vimrc中去, 如果你经常在这个工程编程的话.
最佳实践:
pull/update代码后,在项目代码目录下,执行以下:
ctags -R
vim
:set tags = ./tags
常见用法
ctrl+ ]:跳到光标所在函数或者结构体的定义处
ctrl+ t:返回查找或跳转(其实可以用ctrl+o返回,ctrl+i再进入)
3. Tagbar------>变量及函数列表
tagbar是一个taglist的替代品,比taglist更适合c++使用,函数能够按类区分,支持按类折叠显示等,显示结果清晰简洁
tagbar/taglist做的仅仅是将tag文件中的内容解析完后显示在Vim上而已。tag扫描以及数据文件的生成则是由ctags(Exuberant Ctags)这一工具完成的,所以在使用tagbar/taglist之前,你的电脑需要装有ctags。
安装ctags
sudo apt-get install exuberant-ctags
- 效果图
- 配置
Plugin 'majutsushi/tagbar' "taglist的增强版,依赖于ctags,用来查看函数,通常放在右侧
" for tagbar plugin
"设置tagbar使用的ctags的插件,必须要设置对,这一步也不一定,安装ctags时会自动加环境变量
let g:tagbar_ctags_bin='/usr/bin/ctags'
let g:tagbar_width=30 "设置tagbar的窗口宽度
let g:tagbar_right=1 "设置tagbar的窗口显示在右侧,其它默认也是在右侧
let g:tagbar_sort = 0 "设置标签不排序,默认排序
"打开文件自动 打开tagbar
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx,*.java call tagbar#autoopen()
map <F8> :TagbarToggle<CR> " F8打开Tagbar