在Ubuntu 18.04上安装YouCompleteMe

首先介绍一些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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值