跟我一起学Vim补全神级插件--YouCompleteMe

时间:2022-06-30 16:25:20

最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等还是十分棒的,写点心得下来,也算给自己做个备忘。

快速安装

首先参考我的.vimrc配置,用Vundle安装好之后,进入YCM的文件夹.vim/bundle/YouCompleteMe会找到install.sh脚本文件。这个时候如果你需要C语言系的语义补全你需要在运行install.sh脚本之后手动加入命令--clang-completer,即可进行自动安装,此时YCM会去Clang的官网去下载libclang.so来作为YCM语义补全的支持。

完整安装:

1.如果采用之前的方法不能进行安装的话可以进行自己的定制化安装,YCM是一个编译插件,因此需要进行手动编译。首先第一点就要确保你的Vim的最低版本必须是7.3.584,并且支持python2。如果不支持,你必须自己手动编译一份Vim。(查看是否支持python2可以在Vim中输入:echo has('python')如果输出1就表示支持,0就表示这个时候你需要重新编译了)

2.下载libclang.so,YCM作者推荐下载官方预编译之后的libclang.so而不是用你系统自带的libclang,如果你真的要用自己的sysytem中的libclang需要保证版本号大于等于3.3,否则会出现随机性的错误。

3.编译ycm_support_libs库。首先确保自己安装了python-dev有python的头文件,然后建立临时文件夹ycm_build

cd ~
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

用CMake完成了生成Makefile的过程,注意这个过程是给那些不需要C语义补全的同学,如果你需要C的语义补全,步骤会稍微麻烦点。你需要自己下载二进制发行版的LLVM+Clang或者自己手动编译LLVM和Clang,然后保证bin,lib,inclulde在文件夹根目录下比如ycm_temp/llvm_clang下,然后运行

cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

等待Makefile生成之后运行

make ycm_support_libs 

即完成了ycm_supprot_libs的编译,对于那些想用系统libclang的同学你需要传入-DUSE_SYSTEM_LIBCLANG=ON来替代-DPATH_TO_LLVM_ROOT的flag.如果你系统内有自定义的libclang你也可以定义采用自定义的libclang,-DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so.同时需要注意的是,如果你采用了Clang的语义补全支持,make命令也会把libclang复制一份放到YouCompleteMe/python下面来驱动YCM的运行。

使用:

    完成了YCM的编译就可以享受它给你带来的方便了,如果你需要C语言的语义补全,除了刚刚编译多出来的步骤之外,你还需要提供编译的flag给YCM才能进行真正的补全。YCM查找.ycm_extra_conf.py来进行补全支持,你也可以手动提供一个全局的.ycm_extra_conf.py路径来给YCM做缺省处理(YCM查找路径是依次从里到外的向上,如果找不到会采取默认的全局路径,我选择放在主目录下面,这样不需要设置全局路径,因为YCM始终可以找到它)。

此外说一下.ycm_extra_conf.py,对于一些简单的小项目,使用默认的文件即可,对于默认文件我选择关闭了-Werror因为这样会给Vim提示语义准确的Syntastic带来困扰,另外我多加了一句-isystem,/usr/include/c++/4.8,因为我发现默认的ycm_extra_conf似乎找不到C++头文件。对于复杂项目来说,这个时候又需要借用我们强大的CMake了。CMake中有一个命令可以导出编译flag,-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,这个时候CMake会把当前的编译flag全部导出到一个json数据库-compilation_commands.json,之后 我们需要手动给ycm_extra_conf.py中的compilation_database_folder一行 添加你数据库的位置,比如你在src,ycm_ectra_conf在你目录下,而你的json在build中,所以你需要写floder=./build,这个时候打开Vim,你会发现你的项目已经可以进行补全,我在进行Qt开发的过程中就是将CMake脚本维护好之后通过json来让YCM找到Qt的头文件从而进行补全,十分方便。

总结:都说Vim最强大的乐趣在于*定制,我感觉从Vim定制的过程中也可以学习到很多东西,也会这就是定制给我带来的真正乐趣,迫使我去学习,迫使我去尝试各种情况。我相信喜欢Vim定制的人不在少数,此文就当抛砖引玉,希望我的这篇文章能够帮助到你,同时也希望志同道合的朋友可以留下你的脚印,毕竟有你们的支持才能让我更有写作的动力。

跟我一起学Vim补全神级插件--YouCompleteMe的更多相关文章

  1. VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"

    VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...

  2. Python tab 命令补全,以及 vim 补全

    在python 命令行中,使用补全 python 查看 packages 的目录 可用 sys.path 查看. /usr/lib/python2.7/site-packages vim tab.py ...

  3. CSS3前缀自动补全方案和插件

    第一种方法:prefix free,js插件,大小2kb,直接导入,无需任何浏览器兼容前缀 <script src="prefixfree.min.js"></s ...

  4. VisualStudio神级插件Resharper技巧基础入门到骨灰玩家使用全教程&plus;Resharper性能优化

    原文地址:https://www.masuit.com/21/resharper 破解地址:https://www.masuit.com/20/resharper 官方文档:https://www.j ...

  5. AutoFileName 使用src &comma;href 引入文件时,会自动补全路径的插件

    AutoFileName功能:快捷输入文件名 简介:自动完成文件名的输入,如图片选取 使用:输入”/”即可看到相对于本项目文件夹的其他文件 只要输入 src="" 输入双引号就立马 ...

  6. vim的编译安装及其插件YouCompleteMe安装

    相关的环境: win 7 x64 vs2013 community python 2.7.10 AMD64 python 3.5 AMD64 LLVM 3.5 cmake 3.5   YouCompl ...

  7. VisualStudio神级插件——JetBrains Resharper 2018&period;2&period;3 Ultimate完美破解版&plus;教程

    ReSharper是一个JetBrains公司出品的著名的代码生成工具,是Visual Studio里面的一个插件.它包括一系列丰富的能大大增加C#和Visual Basic .NET开发者生产力的特 ...

  8. VisualStudio神级插件Resharper的基本配置和使用技巧大全&plus;Resharper性能优化

    所谓工欲善其事,必先利其器.尽管visual studio本身已经非常强大,但优秀的插件仍然可以帮开发者大大提高效率. ReSharper是一款由jetbrain开发的针对C#,VB.NET,ASP. ...

  9. 神级编辑器 sublime text 和 神级插件 emmet

    h1{foo}和a[href=#] 生成如下代码 <h1>foo</h1>  <a href="#"></a> 嵌套的使用 > ...

随机推荐

  1. 4580&colon; &lbrack;Usaco2016 Open&rsqb;248

    Description Bessie likes downloading games to play on her cell phone, even though she does find the ...

  2. SQL 两种表复制语句

    1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Tab ...

  3. CSS3 box-shadow快速教程

    box-shadow 属性向框添加一个或多个阴影.这个CSS3的属性很常用,盒阴影.按钮状态等各种地方都有用到,但是你了解并记住各个参数的作用及用法吗? 展示 源码:http://codepen.io ...

  4. Ubuntu14&period;04进入文本模式方法

    ubuntu 10.10以前的操作方法: 1 第一步,具体命令及操作如下: sudo vi /etc/init/rc-sysinit.conf env DEFAULT_RUNLEVEL=3 <- ...

  5. 还原数据库备份文件时,关于&OpenCurlyDoubleQuote;System&period;Data&period;SqlClient&period;SqlError&colon;媒体集有2个媒体簇,但只提供了1个。必须提供所有成员”的处理方式

    好久没写博客了,最近在做毕设的权限管理模块,今天在还原数据库文件时,遇到了“System.Data.SqlClient.SqlError:媒体集有2个媒体簇,但只提供了1个.必须提供所有成员”这个错误 ...

  6. Linux 信号量同步编程

    前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它 ...

  7. 通过RVM安装Ruby失败

    第一次安装失败是由于Homebrew一直安装不成功,遂去http://brew.sh/index_zh-cn.html官网 通过 /usr/bin/ruby -e "$(curl -fsSL ...

  8. Java数组的应用&colon;案例&colon;杨辉三角,三维数组,字符串数组

    //import java.util.Arrays; //包含Arrays //import java.util.Random; public class HelloWorld { public st ...

  9. leetcode math类型题目解题总结

    2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/ class Solution { publi ...

  10. 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习

    哈喽,小伙伴们,我是小悦悦,好久不见~ 春节假期结束,新一轮的工作开始,祝大家猪年如意,开工大吉! 今天小悦悦带你走入猪年学习的正确打开方式——Power BI新一年的持续更新学习!   Power ...