git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
用vim打开任意go文件,实行:GoInstallBinaries。实行之前一定要设置goproxy
a安装所有go工具
go get -u golang.org/x/tools/...
2.安装nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
3.安装nodejs
nvm i 10
s升级g++ ,要不然会涌现FAQ 问题1
4.安装autocomplete
sudo apt install build-essential cmake python3-devcd ~/.vim/bundle/ git clone https://github.com/Valloric/YouCompleteMe.git
激活go和rust的自动补全
python3 install.py --go-completerpython3 install.py --rust-completer
5.代码自动提示
au filetype go inoremap <buffer> . .<C-x><C-o>setlocal omnifunc=go#complete#Complete
终极的vimrc配置
"==============================================================================" vim 内置配置 "==============================================================================" 设置 vimrc 修正保存后急速生效,不用在重新打开" 建议配置完成后将这个关闭,否则配置多了之后会很卡" autocmd BufWritePost $MYVIMRC source $MYVIMRC" 关闭兼容模式set nocompatibleset nu " 设置行号set cursorline "突出显示当前行" set cursorcolumn " 突出显示当前列set showmatch " 显示括号匹配" tab 缩进set tabstop=4 " 设置Tab长度为4空格set shiftwidth=4 " 设置自动缩进长度为4空格set autoindent " 继续前一行的缩进办法,适用于多行注释" 定义快捷键的前缀,即<Leader>let mapleader=";" " ==== 系统剪切板复制粘贴 ====" v 模式下复制内容到系统剪切板vmap <Leader>c "+yy" n 模式下复制一行到系统剪切板nmap <Leader>c "+yy" n 模式下粘贴系统剪切板的内容nmap <Leader>v "+p" 开启实时搜索set incsearch" 搜索时大小写不敏感set ignorecasesyntax enablesyntax on " 开启文件类型侦测filetype plugin indent on " 启用自动补全" 退出插入模式指定类型的文件自动保存au InsertLeave .go,.sh,.php write"==============================================================================" 插件配置 "==============================================================================" 插件开始的位置call plug#begin('~/.vim/plugged')" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align" 可以快速对齐的插件Plug 'junegunn/vim-easy-align'" 用来供应一个导航目录的侧边栏Plug 'scrooloose/nerdtree'" 可以使 nerdtree Tab 标签的名称更友好些Plug 'jistr/vim-nerdtree-tabs'" 可以在导航目录中看到 git 版本信息Plug 'Xuyuanp/nerdtree-git-plugin'" 查看当前代码文件中的变量和函数列表的插件," 可以切换和跳转到代码中对应的变量和函数的位置" 大纲式导航, Go 须要 https://github.com/jstemmer/gotags 支持Plug 'majutsushi/tagbar'" 自动补全括号的插件,包括小括号,中括号,以及花括号Plug 'jiangmiao/auto-pairs'" Vim状态栏插件,包括显示行号,列号,文件类型,文件名,以及Git状态Plug 'vim-airline/vim-airline'" 有道词典在线翻译Plug 'ianva/vim-youdao-translater'" 代码自动完成,安装完插件还须要额外配置才可以利用Plug 'Valloric/YouCompleteMe'" 可以在文档中显示 git 信息Plug 'airblade/vim-gitgutter'" 下面两个插件要合营利用,可以自动天生代码块Plug 'SirVer/ultisnips'Plug 'honza/vim-snippets'" 配色方案" colorscheme neodarkPlug 'KeitaNakamura/neodark.vim'" colorscheme monokaiPlug 'crusoexia/vim-monokai'" colorscheme github Plug 'acarapetis/vim-colors-github'" colorscheme one Plug 'rakr/vim-one'" go 紧张插件Plug 'fatih/vim-go', { 'tag': '' }" go 中的代码追踪,输入 gd 就可以自动跳转Plug 'dgryski/vim-godef'" markdown 插件Plug 'iamcco/mathjax-support-for-mkdp'Plug 'iamcco/markdown-preview.vim'" 插件结束的位置,插件全部放在此行上面call plug#end()"==============================================================================" 主题配色 "==============================================================================" 开启24bit的颜色,开启这个颜色会更俊秀一些set termguicolors" 配色方案, 可以从上面插件安装中的选择一个利用 colorscheme one " 主题set background=dark " 主题背景 dark-深色; light-浅色"==============================================================================" vim-go 插件"==============================================================================let g:go_fmt_command = "goimports" " 格式化将默认的 gofmt 更换let g:go_autodetect_gopath = 1let g:go_list_type = "quickfix"let g:go_version_warning = 1let g:go_highlight_types = 1let g:go_highlight_fields = 1let g:go_highlight_functions = 1let g:go_highlight_function_calls = 1let g:go_highlight_operators = 1let g:go_highlight_extra_types = 1let g:go_highlight_methods = 1let g:go_highlight_generate_tags = 1let g:godef_split=2"==============================================================================" NERDTree 插件"==============================================================================" 打开和关闭NERDTree快捷键map <F10> :NERDTreeToggle<CR>" 显示行号let NERDTreeShowLineNumbers=1" 打开文件时是否显示目录let NERDTreeAutoCenter=1" 是否显示隐蔽文件let NERDTreeShowHidden=0" 设置宽度" let NERDTreeWinSize=31" 忽略一下文件的显示let NERDTreeIgnore=['\.pyc','\~$','\.swp']" 打开 vim 文件及显示书签列表let NERDTreeShowBookmarks=2" 在终端启动vim时,共享NERDTreelet g:nerdtree_tabs_open_on_console_startup=1"==============================================================================" majutsushi/tagbar 插件"==============================================================================" majutsushi/tagbar 插件打开关闭快捷键nmap <F9> :TagbarToggle<CR>let g:tagbar_type_go = { \ 'ctagstype' : 'go', \ 'kinds' : [ \ 'p:package', \ 'i:imports:1', \ 'c:constants', \ 'v:variables', \ 't:types', \ 'n:interfaces', \ 'w:fields', \ 'e:embedded', \ 'm:methods', \ 'r:constructor', \ 'f:functions' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 't' : 'ctype', \ 'n' : 'ntype' \ }, \ 'scope2kind' : { \ 'ctype' : 't', \ 'ntype' : 'n' \ }, \ 'ctagsbin' : 'gotags', \ 'ctagsargs' : '-sort -silent'\ }"==============================================================================" nerdtree-git-plugin 插件"==============================================================================let g:NERDTreeGitStatusIndicatorMapCustom= { \ "Modified" : "✹", \ "Staged" : "✚", \ "Untracked" : "✭", \ "Renamed" : "➜", \ "Unmerged" : "═", \ "Deleted" : "✖", \ "Dirty" : "✗", \ "Clean" : "✔︎", \ 'Ignored' : '☒', \ "Unknown" : "?" \ }let g:NERDTreeGitStatusShowIgnored= 1"==============================================================================" Valloric/YouCompleteMe 插件"==============================================================================" make YCM compatible with UltiSnips (using supertab)let g:ycm_key_list_select_completion = ['<C-n>', '<space>']let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']let g:SuperTabDefaultCompletionType = '<C-n>'" better key bindings for UltiSnipsExpandTriggerlet g:UltiSnipsExpandTrigger = "<tab>"let g:UltiSnipsJumpForwardTrigger = "<tab>"let g:UltiSnipsJumpBackwardTrigger = "<s-tab>""==============================================================================" 其他插件配置"==============================================================================" markdwon 的快捷键map <silent> <F5> <Plug>MarkdownPreviewmap <silent> <F6> <Plug>StopMarkdownPreview" tab 标签页切换快捷键:nn <Leader>1 1gt:nn <Leader>2 2gt:nn <Leader>3 3gt:nn <Leader>4 4gt:nn <Leader>5 5gt:nn <Leader>6 6gt:nn <Leader>7 7gt:nn <Leader>8 8gt:nn <Leader>9 8gt:nn <Leader>0 :tablast<CR>"==============================================================================" GVim 的配置"==============================================================================" 如果不该用 GVim ,可以不用配置下面的配置if has('gui_running') colorscheme one " 设置启动时窗口的大小 set lines=999 columns=999 linespace=4 " 设置字体及大小 set guifont=Roboto\ Mono\ 13 set guioptions-=m " 隐蔽菜单栏 set guioptions-=T " 隐蔽工具栏 set guioptions-=L " 隐蔽左侧滚动条 set guioptions-=r " 隐蔽右侧滚动条 set guioptions-=b " 隐蔽底部滚动条 " 在 gvim 下不会和 terminal 的 alt+数字的快捷键冲突, " 以是将 tab 切换配置一份 alt+数字的快捷键 :nn <M-1> 1gt :nn <M-2> 2gt :nn <M-3> 3gt :nn <M-4> 4gt :nn <M-5> 5gt :nn <M-6> 6gt :nn <M-7> 7gt :nn <M-8> 8gt :nn <M-9> 9gt :nn <M-0> :tablast<CR>endifau filetype go inoremap <buffer> . .<C-x><C-o>setlocal omnifunc=go#complete#Complete
FAQ:
问题1:Your C++ compiler does NOT fully support C++17
sudo apt-get install g++-8sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8