支持GoLang,类似 Source Insight的vim编辑器搭建
,曾经配置过一个类似source insight的vim编辑器,(http://www.52php.cn/article/p-abnyxlim-bpt.html)默认对C,C++语言是支持的,只是不支持golang,下面介绍下如果打造一个vim-go的编辑器,类似source insight,自动补齐等等,我使用的是ubuntu16.04 LTS 32bits。 下载安装GoLang写博时,官方稳定版本是1.8,下载的是linux 32bits的。 配置环境变量可以将下面内容复制到/etc/profile,也可以复制到~/.profile # go path
export GOROOT=/usr/local/go
export GOARCH=386
export GOOS=linux
export GOPATH=/home/jack/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin:$GOBIN
下面安装的一些go工具,如果配置了GOBIN这个变量,都会安装到这个目录下,如果没有配置这个变量,默认会安装在当前目录下的go目录下。 运行一下go命令,如果显示go命令的Usage,说明已经安装配置成功,或者go version看到版本信息,也说明安装成功。 hello GoLang写一段程序测试下:摘抄于官网 // You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello,世界")
}
$go run test.go 准备配置vim-go由于配置vim-go,需要安装一些go .tools binaries,这些工具默认会安装在$GOBIN下面。安装这些工具需要一些辅助工具,比如分布式版本控制系统Mercurial。 $sudo add-apt-repository ppa:tortoisehg-ppa/releases
$sudo add-apt-repository ppa:mercurial-ppa/releases
$sudo apt-get update
$sudo apt-get install mercurial python-nautilus tortoisehg
安装git, vim: $sudo app-get install git
$sudo app-get install vim
安装ctags-exuberant,这个工具,后面很多插件会用到,tagbar,nerdtree,gotags等。 $sudo app-get install exuberant-ctags
$ctags-exuberant --version
Exuberant Ctags 5.9~svn20110310,Copyright (C) 1996-2009 Darren Hiebert
$ ctags-exuberant --list-languages //查看支持那些语言
......
Flex
Fortran
Go
HTML
Java
......
另外,配置YCM时,由于YCM用到了C++实现性能上的优化,所以需要安装C++的编译环境: $sudo apt-get install build-essential cmake python-dev 插件管理工具vundlevim-go官方提到两种插件管理工具,除vundle还有pathogen,只是选择vundle的比较多,我这里也以vundle为例介绍。 安装Vundle.vim$mkdir ~/.vim/bundle
$git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
后面安装的plugin都安装在~/.vim/bundle下面。 配置~/.vimrc文件以支持plugin的安装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
保存.vimrc退出,在bash下输入vim命令回车,在命令行模式下输入 :PluginInstall回车,这时在窗口底部会看到Processing ‘gmarik/Vundle.vim’,表示正在从网络下载这个插件,等底部显示Done!即表示下载成功,这时退出vim,到~/.vim/bundle下可以看到多了一个vundle的path。 安装vim-go插件编辑~/.vimrc,在vundle#begin和vundle#end间增加一行: Plugin 'fatih/vim-go'
在Vim内执行 :PluginInstall,窗口下方会提示:Processing ‘fatih/vim-go’,待下载安装完毕后,提示信息变 成“Done!” 安装go.tools Binariesvim-go安装说明中提到所有必要的binary需要先安装好,比如gocode、godef、goimports等. 打vim,在命令行模式下输入:GoInstallBinaries :GoInstallBinaries
vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/jack/go/bin/
vim-go: gometalinter not found. Installing github.com/alecthomas/gometalinter to folder /home/jack
/go/bin/
vim-go: goimports not found. Installing golang.org/x/tools/cmd/goimports to folder /home/jack/go/b
in/
vim-go: guru not found. Installing golang.org/x/tools/cmd/guru to folder /home/jack/go/bin/
vim-go: gorename not found. Installing golang.org/x/tools/cmd/gorename to folder /home/jack/go/bin
/
vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/jack/go/bin/
vim-go: godef not found. Installing github.com/rogpeppe/godef to folder /home/jack/go/bin/
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/jack/go/bin/
vim-go: gotags not found. Installing github.com/jstemmer/gotags to folder /home/jack/go/bin/
vim-go: asmfmt not found. Installing github.com/klauspost/asmfmt/cmd/asmfmt to folder /home/jack/g
o/bin/
vim-go: motion not found. Installing github.com/fatih/motion to folder /home/jack/go/bin/
vim-go: gomodifytags not found. Installing github.com/fatih/gomodifytags to folder /home/jack/go/b
in/
vim-go: gogetdoc not found. Installing github.com/zmb3/gogetdoc to folder /home/jack/go/bin/
vim-go: impl not found. Installing github.com/josharian/impl to folder /home/jack/go/bin/
vim-go: keyify not found. Installing github.com/dominikh/go-tools/cmd/keyify to folder /home/jack/
go/bin/
注意下,这里会访问到google,由于我们的网络问题,需要翻下才行。 安装成功后GOBIN下面: jack@jxes-VirtualBox:~$ ls $GOBIN -l
total 64412
-rwxrwxr-x 1 jack jack 2347772 7月 19 17:29 asmfmt
-rwxrwxr-x 1 jack jack 4228667 7月 19 17:28 errcheck
-rwxrwxr-x 1 jack jack 8656435 7月 19 17:18 gocode
-rwxrwxr-x 1 jack jack 4556792 7月 19 17:28 godef
-rwxrwxr-x 1 jack jack 4902326 7月 19 17:29 gogetdoc
-rwxrwxr-x 1 jack jack 4024027 7月 19 17:25 goimports
-rwxrwxr-x 1 jack jack 4322181 7月 19 17:26 golint
-rwxrwxr-x 1 jack jack 5016936 7月 19 17:25 gometalinter
-rwxrwxr-x 1 jack jack 3174321 7月 19 17:29 gomodifytags
-rwxrwxr-x 1 jack jack 4551554 7月 19 17:26 gorename
-rwxrwxr-x 1 jack jack 2276387 7月 19 17:29 gotags
-rwxrwxr-x 1 jack jack 6897486 7月 19 17:26 guru
-rwxrwxr-x 1 jack jack 3864326 7月 19 17:29 impl
-rwxrwxr-x 1 jack jack 4486579 7月 19 17:30 keyify
-rwxrwxr-x 1 jack jack 2623469 7月 19 17:29 motion
这里的gotags在后tagbar里会用到。 安装 UltiSnipsVim-go默认是用ultisnips引擎插件,但这个插件需要单独安装。 同样,我们利用vundle来安装它,在~/.vimrc中添加一行: Plugin 'SirVer/ultisnips'
这个插件功能是,比如输入func后敲击tab键,会自动带出如下这样的: func name(params) type{ }
安装YCM(Your Complete Me)在~/.vimrc中添加一行: Plugin 'Valloric/YouCompleteMe'
保存退出后,再打开~/.vimrc并执行PluginInstall 下载完成后: cd ~/.vim/bundle/YouCompleteMe
./install.sh
构建(编译C++很慢,需要耐心的等一会)ok后,可以打开test.go看下效果,会有自动补齐功能,很cool! 需要注意:YCM与ultisnips会有快捷键上的冲突。 "================================ " 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>"
这样让YCM通过回车和向下的箭头来做list item正向选择,通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。 安装molokai themeMolokai theme是TextMate的theme的vim port,颜色不错,配置比较简单: mkdir ~/.vim/colors
下载或复制https://github.com /fatih/molokai/blob/master/colors/molokai.vim到~/.vim /colors目录下
在.vimrc添加一行:colorscheme molokai
下面来张cool图展示下:安装NERDTree插件在.vimrc下面加上: "=============================== " NERDTree settings
" ============================== " F2 to open NERDTree
map <F7> :NERDTreeToggle<CR>
" modify the icon of the tree "let g:NERDTreeDirArrowExpandable = '+'
"let g:NERDTreeDirArrowCollapsible = '-' " show postion of the window
let g:NERDTreeWinPos = 'left'
" the size of window let g:NERDTreeSize = 30 " show line num in window
"let g:NERDTreeShowLineNumber = 1 " if show hidden file
"let g:NERDTreeHidden = 0 " open vim,if no file,open NERDTree automatically
" autocmd vimenter * if !argc()|NERDTree|endif " automatically close when the NERDTree is the only one window
" autocmd bufenter * if (winnr("$")==1 && exists("b:NERDTree") && " b:NERDTree.isTabTree())|q|endif
" open NERDTree automatically when open vim " autocmd vimenter * NERDTree</cr></f2>
安装Tagbar插件在.vimrc下面加上: "=============================== " Tagbar settings
" ============================== " Set width of the Tagbar window
let g:tagbar_width = 30
" map shutcut key for Tagbar,press F8 to open automatically nmap <F8> :TagbarToggle<CR> " tagbar usr ctags plugin
" let g:tagbar_ctags_bin = 'ctags' " show on left,default is right
" let g:tagbar_left = 1 " set tagbar window width,default size is 40
" let g:tagbar_width = 30 " consur stays on tagbar window,default is on vim window
let g:tagbar_autofocus = 1
" set label not sorted,default is sorted let g:tagbar_sort = 0 " support golang
let g:tagbar_type_go = {
'ctagstype': 'go', 'kinds' : [
'p:package','f:function','v:variables','t:type','c:const'
]
}
注意:g:tagbar_type_go 这里的设置在官方网站上提供了两种方法,由于我安装了ctags,所以采用上面这种设置。 Google Go
Proper Go support is provided by the gotags project,complete with how to configure Tagbar to make use of it.
Alternatively,if you use the Go patch for exuberant-ctags or the Debian/Ubuntu package (which has it integrated),the following configuration provides simple support without scopes:
let g:tagbar_type_go = {
'ctagstype': 'go','c:const'
]
}
另外一种是基于gotags,其官方配置:https://github.com/jstemmer/gotags 安装SrcExpl插件在.vimrc下面加上: "=============================== " SrcExpl settings
" ============================== " // The switch of the Source Explorer
nmap <F9> :SrcExplToggle<CR>
" // Set the height of Source Explorer window let g:SrcExpl_winHeight = 8 " // Set 100 ms for refreshing the Source Explorer
let g:SrcExpl_refreshTime = 100
" // Set "Enter" key to jump into the exact definition context let g:SrcExpl_jumpKey = "<ENTER>" " // Set "Space" key for back from the definition context
let g:SrcExpl_gobackKey = "<SPACE>"
" // In order to avoid conflicts,the Source Explorer should know what plugins " // except itself are using buffers. And you need add their buffer names into
" // below listaccording to the command ":buffers!" let g:SrcExpl_pluginList = [ "__Tag_List__", "_NERD_tree_" ] " // Enable/Disable the local definition searching,and note that this is not
" // guaranteed to work,the Source Explorer doesn't check the syntax for now. " // It only searches for a match with the keyword according to command 'gd'
let g:SrcExpl_searchLocalDef = 1
" // Do not let the Source Explorer update the tags file when opening let g:SrcExpl_isUpdateTags = 0 " // Use 'Exuberant Ctags' with '--sort=foldcase -R .' or '-L cscope.files' to
" // create/update the tags file let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ." " // Set "<F12>" key for updating the tags file artificially
let g:SrcExpl_updateTagsKey = "<F12>"
" // Set "<F3>" key for displaying the previous definition in the jump list let g:SrcExpl_prevDefKey = "<F3>" " // Set "<F4>" key for displaying the next definition in the jump list
let g:SrcExpl_nextDefKey = "<F4>"
Nerdtree,tagbar,SrcExpl三窗口之间切换可以按ctrl+w+w Show下cool图完整.vimrc可以去我的资源下载: 再发一个网络上大牛的配置,只是是针对PHP,CSS,XML,JAVASCRIPT,MARKDOWN,PHYTHON之类的开发, 对C/C++和GO的支持都不是太好,另外,对GVIM有一点冲突,片段显示窗口等小问题,不过可以使用。 281 " for vim-go
282 au FileType go nmap <leader> s <plug> (go-implements)
283 au FileType go nmap <leader> i <plug>(go-info)
284 au FileType go nmap <Leader> gd <plug> (go-doc)
285 au FileType go nmap <Leader> gv <plug> (go-doc-vertical)
286 au FileType go nmap <Leader> r <plug> (go-run)
287 au FileType go nmap <Leader> b <plug> (go-build)
288 au FileType go nmap <leader> t <plug> (go-test)
289 au FileType go nmap <Leader> c <plug> (go-coverage)
290 au FileType go nmap <Leader> ds <plug> (go-def-split)
291 au FileType go nmap <Leader> dv <plug> (go-def-vertical)
292 au FileType go nmap <leader> dt <plug> (go-def-tap)
293 au FileType go nmap <Leader> e <plug> (go-rename)
294
295 let g:go_fmt_command = "goimports"
297 " for YCM
298 let g:ycm_key_list_select_completion = ['','']
299 let g:ycm_key_list_previous_completion = ['']
300 let g:ycm_key_invoke_completion = '<C-Space>'
4.插件包里有一个插件有点旧,可以换下。 29 "Bundle 'edsono/vim-matchit'
30 Bundle 'tmhedberg/matchit'
最后说明一下,此配置里的几个常用快捷键: F5 -> Toggle Nerd-Tree file viewer F6 -> Toggle tagbar Ctrl + p -> Toggle ctrlp F3 -> Toggle Gundo viewer F4 -> Toggle Indent Guides F12 -> Toggle Mouse (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |