首先介绍一些YouCompleteMe,这是一个用于vim代码补齐的插件,如果想要将反人类的原生vim(调侃一下)打造成媲美VS的IDE的话是不可缺少的,当然这个插件的安装对于一些刚接触linux的人来说可以称得上是杀手级插件,安装难度不小,由于一些原因,我反复安装了好几次,写了篇博客整合了一些网上常见的一些教程,多次实验确保了一个稳定能用的安装流程,希望能够帮助到一些对这方面有需求的人。
首先查看自己的系统上vim的版本,YCM要求vim版本要大于7.4以上并添加对python的支持
安装环境:win10上安装的VM版本是12.0,刚安装好ubuntu 18.04,建议将当前的状态拍摄快照存储下来,以防万一
查看自带的vim的版本
vim --version
- 1
我的系统没有安装,正好省去了一些麻烦,如果自己的版本小于7.4,那就得卸载后重装
尝试安装一下
apt install vim
- 1
报错
查看下当前是否有apt-get进程
ps aux|grep apt-get
- 1
并没有,那只能强制解锁了
sudo rm /var/lib/dpkg/lock
- 1
然后重新安装下
这次安装成功了,
查看下对python的支持
支持python3,但貌似不支持python2
网上的教程提供了另一种查看支持的方式,那就是打开vim 在命令模式下输入
echo has("python")||has("python3")
- 1
这条命令明显只要添加了一种支持就能输出1,而vim在实际运行的时候并不能同时对两种python进行支持,这是否意味这YCM的插件只要添加1种python支持就能运行呢?我们先进行下一步操作
安装git(用来下载相关的插件)和gmake(用来编译ycm)
apt-get install git
apt-get install gmake
- 1
- 2
注意,这里终于搞明白了,安装ycm的时候vim对python的支持只要有有一种就够了,如果两个都支持的话运行ycm的时候会报错,提示找不到python,坑了我好几次
执行到这里,那么你有两个选择了,
1.挑战高难度,下载Vuncle(插件管理),配置.vimrc文件,下载YCM并手动编译(没科学上网工具的话得享受几kb的下载速度),下载并手动编译clang库(使用gmake)编辑.ycm_extra_conf.py文件,解决途中的各种报错,一不小心你就得重新来
2.站在巨人的肩膀上,使用大佬制作的脚本,傻瓜式一键安装
先说第二种方法
使用这种方法只要能使用git clone命令就行了,不需要配置任何环境,所有需要的插件,下载编译过程都会自动帮你安装,甚至vim都不需要安装
赞美开源大佬!
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
上张效果图
接下来加大力度,尝试使用第一种方式安装
1.移除原有的vim
sudo apt-get remove vim vim-runtime gvim
sudo apt-get remove vim-tiny vim-common vim-gui-common vim-nox
- 1
- 2
2.安装cmake,cmake指令用于编译clang库文件
3.安装所需要的依赖项目
sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev
- 1
sudo apt-get install libgtk2.0-dev libatk1.0-dev libbonoboui2-dev
sudo apt-get install libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev
sudo apt-get install python3-dev ruby-dev lua5.1 liblua5.1-dev libperl-dev git
4.下载vim8.0并手动编译,添加对python的支持
git clone https://github.com/vim/vim.git
- 1
进入安装文件夹,添加安装参数,主要是添加对python3的支持,
首先要查看一些自己的系统里有没有安装这两个,使用指令
whereis python
- 1
可以看到我的电脑里已经安装了python3.6,在/usr/bin/目录下,等下编译的时候需要将这个文件的路径输入
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3.6/config \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
编译和安装
sudo make VIMRUNTIMEDIR=/usr/share/vim/vim81&&sudo make install
- 1
安装好了后看一下是否安装成功
vim--version|grep python
- 1
支持了python3,注意,千万别把python2也支持了,不然运行ycm的时候报错,提示找不到python,那就得重新来一遍了,极其麻烦,当然,使用apt-get install vim指令下载的vim也是支持python3的,但是貌似会缺少一些依赖项目,有待验证。
5.下载Vundle,Vundle是一个vim的插件管理工具
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 1
路径最好不要修改
然后配置下自己的.vimrc文件,如果没有的话自己touch一个出来,当然,带.的文件都是默认隐藏的,需要ls的时候记得带上参数-a,打开.vimrc文件,写入以下内容
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe'
call vundle#end()
filetype plugin indent on
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
当然,如果想自己添加其他插件的话按照这上面的格式
请将安装插件的命令放在vundle#begin和vundle#end之间.
Github上的插件
格式为 Plugin ‘用户名/插件仓库名’
Plugin ‘tpope/vim-fugitive’
来自 http://vim-scripts.org/vim/scripts.html 的插件
Plugin ‘插件名称’ 实际上是 Plugin ‘vim-scripts/插件仓库名’ 只是此处的用户名可以省略
然后打开vim在命令模式下输入PluginInstall指令,会自动帮你下载注册好的插件,建议科学上网,不然200多mb的东西会下你半个多小时
当出现这个就表示下载成功了,注意一点安装途中千万别退出,不然你在执行安装指令的时候会显示安装成功了,但是其实却没有下载完整的。
下载完成后进入目录执行安装程序
cd /root/.vim/bundle/YouCompleteMe
./install.py --clang-completer
它会自动帮你下载并编译clang库
6.修改.ycm_extra_conf.py文件
(此处内容直接来自于https://www.cnblogs.com/zzqcn/p/4660615.html#_label4_0)
ycm在语义分析时使用libclang,而libclang需要参数选项,这从哪里来呢?YCM通过提供给一个代码工程一个python文件的方式来通知libclang所需的参数选项,这个文件就是.ycm_extra_conf.py。YCM安装好后在,在路径~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py有一个默认的配置文件,可以把它拷贝到你的代码所在主目录下,并进行修改。主要是修改此文件中的flags表,加入自己代码所在路径、语言类型(C/C++)等
将文件中原本的flag区域换成如下代码
flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wc++98-compat',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
# You 100% do NOT need -DUSE_CLANG_COMPLETER in your flags; only the YCM
# source code needs it.
'-DUSE_CLANG_COMPLETER',
# THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which
# language to use when compiling headers. So it will guess. Badly. So C++
# headers will be compiled as C headers. You don't want that so ALWAYS specify
# a "-std=<something>".
# For a C project, you would set this to something like 'c99' instead of
# 'c++11'.
'-std=c++11',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-isystem',
'../BoostParts',
'-isystem',
# This path will only work on OS X, but extra paths that don't exist are not
# harmful
'/System/Library/Frameworks/Python.framework/Headers',
'-isystem',
'../llvm/include',
'-isystem',
'../llvm/tools/clang/include',
'-I',
'.',
'-I',
'./ClangCompleter',
'-isystem',
'./tests/gmock/gtest',
'-isystem',
'./tests/gmock/gtest/include',
'-isystem',
'./tests/gmock',
'-isystem',
'./tests/gmock/include',
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
7.在.vimrc里添加如下语句
" YouCompleteMe
set runtimepath+=~/.vim/bundle/YouCompleteMe
let g:ycm_collect_identifiers_from_tags_files = 1 " 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全
let g:syntastic_ignore_files=[".*\.py$"]
let g:ycm_seed_identifiers_with_syntax = 1 " 语法关键字补全
let g:ycm_complete_in_comments = 1
let g:ycm_confirm_extra_conf = 0
let g:ycm_key_list_select_completion = ['<c-n>', '<Down>'] " 映射按键, 没有这个会拦截掉tab, 导致其他插件的tab不能用.
let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']
let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
"上一句如果将这个配置文件放在了工作目录下的话可以不需要
let g:ycm_show_diagnostics_ui = 0 " 禁用语法检查
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" | " 回车即选中当前项
nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>| " 跳转到定义处
"let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
到这里基本的代码补齐就已经完成了,上一张效果图
不过目前还存在一些问题,比如头文件的补全支持不完整,只有输入“ ”的时候才能有提示,不支持<>文件的补齐,如果想要支持的话需要下载ctag和一些其他的插件,这里我就不介绍了
系统如果是centos7的话安装流程基本上也是相同的,只要改一下相应的下载指令,其实如果用ubutu18.04的话很多过程可以省略,比如说YCM的下载可以直接apt-get,
参考来源
https://www.cnblogs.com/zzqcn/p/4660615.html#_label4_0
【vim】插件管理及代码智能提示与补全环境的配置
https://www.cnblogs.com/Harley-Quinn/p/6418070.html
Ubuntu 16.04 64位安装YouCompleteMe
https://github.com/VundleVim/Vundle.vim
https://github.com/Valloric/YouCompleteMe#installation