关于 vim - YouCompleteMe 的安装

前提:

确保 vim 版本是 7.4.143 或以上,并且支持 python 2/3 脚本。

先通过 Git clone  或者 plug-install  的方式安装 YCM


步骤一:

基础配件要装好,不然麻烦重重:

C++家族的配件:

sudo apt-get install llvm clang-3.9 libclang-3.9-dev libboost-all-dev

步骤二:

   我们需要找到libclang.so的路径在哪里,一般是在/usr/目录下使用一下命令查找

find /usr/ -name "libclang.so*"

  

cmake -G "<generator>" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

官方解释:

For those who want to use the system version of boost, you would pass -DUSE_SYSTEM_BOOST=ON to cmake. This may be necessary on some systems where the bundled version of boost doesn't compile out of the box.

在任意位置创建一个文件夹,在里面进行编译工作。

然后编译(在新建的文件夹里)。         

我的运行代码:

cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp 

注意:这里有两个坑。

第一,注意 libclang 版本。

-- Using external libclang: /usr/lib/x86_64-linux-gnu/libclang-14.so.14.0.0

观察编译结束末尾几行中的 libclang 版本是否满足要求。系统安装的 libclang 最低要是是 3.9。

如果低于所需版本,就要删除 ~/.ycm_build 目录下的所有文件,使用下面的cmake选项参数指定 libclang 的版本重新编译。 

DEXTERNAL_LIBCLANG_PATH="xxxxxx"

第二,如果选项参数里的两个横线“--” 出问题,会出现C家族语义补全失效和找不到 "ycm_core"的情况。

成功后的输出结果,应该包含在前几行:

Using libclang to provide semantic completion for C/C++/ObjC


 步骤三:

Makefile 收尾:构建 ycm_core

官方解释:

Now that configuration files have been generated, compile the libraries using this command:

 YCM 官方墙烈推荐使用上游编译的二进制文件代替系统自带的 libclang

You can use the system libclang only if you are sure it is version 3.9 or higher, otherwise don’t. Even if it is, we recommend using the official binaries from llvm.org if at all possible. Make sure you download the correct archive file for your OS.

We STRONGLY recommend AGAINST use of the system libclang instead of the upstream compiled binaries. Random things may break. Save yourself the hassle and use the upstream pre-built libclang.

(需要python3-dev) 

cmake --build . --target ycm_support_libs --config Release

我的运行代码:

cmake --build . --target ycm_core --config Release

(config Release 选项适用于 windows)

这一步运行后会有 0% 到 100%  的编译提示,最终出现 [100%] Built target ycm_core 的字样。


步骤四:

添加 vim 配置

注意下面的 python 解释器的路径要和编译 ycm_core 的时候使用的 python 解释器是相同的版本

 #~/.vimrc
let g:ycm_server_python_interpreter="/usr/bin/python3"
let g:ycm_global_ycm_extra_conf="~/.vim/plugged/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py""

其他语言:

java

首先提前安装环境:

sudo apt install openjdk-8-jre 

然后编译java环节。

python3 install.py --java-completer

官方文档:

  • Java support: install JDK 17 and add --java-completer when calling install.py.

python

python自动补全。编译过去就行。

下面是一些关于python设置的官方文档

Python settings

The Settings function allows users to specify the Python interpreter and the sys.path used by the completer to provide completion and code comprehension. No additional arguments are passed.

The return value expected by the completer is a dictionary containing the following items:

  • interpreter_path: (optional) path to the Python interpreter. ~ and environment variables in the path are expanded. If not an absolute path, it will be searched through the PATH.

  • sys_path: (optional) list of paths prepended to sys.path.

Usage example:

def Settings( **kwargs ):return {'interpreter_path': '~/project/virtual_env/bin/python','sys_path': [ '~/project/third_party/module' ]}
PythonSysPath( **kwargs )

Optional for Python support.

This function allows further customization of the Python path sys.path. Its parameters are the possible items returned by the Settings function for the Python completer:

  • interpreter_path: path to the Python interpreter.

  • sys_path: list of Python paths from sys.path.

The return value should be the modified list of Python paths.

See ycmd's own .ycm_extra_conf.py for an example.


 


问题汇总:

1.如果YCM的使用过程出现了问题,使用如下命令查看错误日志:

YcmToggleLogs stderr 

2.一个很牛的YCM调试随笔(通过修改源码使YCM支持gbk格式)

https://www.cnblogs.com/HGtz2222/p/5175151.html

3.之前遇到的一个坑:

YCM 的 python install.py ,出现了找不到 python 的情况。这时需要到出问题的文件里修改代码,将其引用的python头文件 (<pyhton.h>) 加上相对路径。

如:

include<python.h>
#改为
include<usr/local/python.h>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149936.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占…

vue3 中使用echarts图表——柱状图

柱状图是比较常用的图形结构&#xff0c;所以我先收集一些精美的柱状图 一、柱状图&#xff1a;设置圆角和颜色 <template><div class"box" ref"chartDom"></div> </template> <script setup> import { ref, onMounted } fr…

无法启动此程序,因为计算机中“找不到msvcp140.dll”的解决方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个动态链接库文件&#xff0c;它是许多基于Visual Studio开发的应用程序和游戏的必要组件。当计算机上缺失msvcp140.dll文件时&#xff0c;可能会导致以下问题&#xff1a; 1. 程序无法启动&#xff0c;提示“找不到…

位图/布隆过滤器

一、位图 1.1位图的概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 1.2位图的实现 template<size_t N>class bitset{public:bitset(){//需要N个比特位&#xff0c;…

生产设备巡检管理系统

凡尔码搭建生产设备巡检系统是通过确保巡检工作的质量以及提高巡检工作的效率来提高设备维护水平的一种系统&#xff0c;它对巡检管理考核工作从巡检人员、巡检任务、隐患管理、图像视频、盯防考核进行严格、科学的统计、分析&#xff0c;从而有效的保障巡检工作的顺利展开&…

Opengl之立方体贴图

简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一…

约束优化算法(optimtool.constrain)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2约束优化算法&#xff08;optimtool.constrain&#xff09; import optimtool.constrain as oc oc.[方法名].[函数名]([目标函数], [参数表], [等式约束表], [不等式约数表], [初…

VulnHub Earth

一、信息收集 1.主机和端口扫描 nmap -sS 192.168.103.1/24 发现443端口有DNS解析&#xff0c;在hosts文件中添加DNS解析&#xff1a; 2.收集earth.local信息 发现有Previous Messages 37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161…

Electron笔记

基础环境搭建 官网:https://www.electronjs.org/zh/ 这一套笔记根据这套视频而写的 创建项目 方式一: 官网点击GitHub往下拉找到快速入门就能看到下面这几个命令了 git clone https://github.com/electron/electron-quick-start //克隆项目 cd electron-quick-start //…

前端position: absolute是相对于谁定位的?

1. 当祖父元素是relative定位, 父元素是absolute定位, 子元素也是absolute定位 <script setup></script><template><div class"relative"><p class"absolute1">absolute1<p class"absolute2">absolute2<…

计算机竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

使用ebpf 监控linux内核中的nat转换

1.简介 Linux NAT&#xff08;Network Address Translation&#xff09;转换是一种网络技术&#xff0c;用于将一个或多个私有网络内的IP地址转换为一个公共的IP地址&#xff0c;以便与互联网通信。 在k8s业务场景中&#xff0c;业务组件之间的关系十分复杂. 由于 Kubernete…

gin 框架的 JSON Render

gin 框架的 JSON Render gin 框架默认提供了很多的渲染器&#xff0c;开箱即用&#xff0c;非常方便&#xff0c;特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render&#xff0c;那么它们的区别是什么呢&#xff1f; // JSON contains the given interface obje…

了解基于Elasticsearch 的站内搜索,及其替代方案

对于一家公司而言&#xff0c;数据量越来越多&#xff0c;如果快速去查找这些信息是一个很难的问题&#xff0c;在计算机领域有一个专门的领域IR&#xff08;Information Retrival&#xff09;研究如何获取信息&#xff0c;做信息检索。在国内的如百度这样的搜索引擎也属于这个…

oracle OCP OCM MySQL OCP认证难吗?

好多人在初次考OCP时&#xff0c;不知道如何选择&#xff0c;本文让姚远ACE老师为大家总结一下吧&#xff01; 选择OCP认证时要注意的问题&#xff1a; 1&#xff0c;授课老师师资经验&#xff08;非常重要&#xff09; 2&#xff0c;课程大纲 3&#xff0c;试听课程 4&am…

PHP 行事准则:allow_url_fopen 与 allow_url_include

文章目录 参考环境allow_url_fopenallow_url_fopen 配置项操作远程文件file 协议 allow_url_includeallow_url_include 配置项 allow_url_include 与 allow_url_fopen区别联系默认配置配置项关闭所导致异常运行时配置ini_set()限制 参考 项目描述搜索引擎Bing、GoogleAI 大模型…

安全性算法

目录 一、安全性算法 二、基础术语 三、对称加密与非对称加密 四、数字签名 五、 哈希算法 六、哈希算法碰撞与溢出处理 一、安全性算法 安全性算法的必要性&#xff1a; 安全性算法的必要性是因为在现代数字化社会中&#xff0c;我们经常需要传输、存储和处理敏感的数据…

运营人必备这个微信运营工具

微信管理系统CRM在各行各业都有应用的场景---IT互联网、制造业、商业服务、金融投资、教育培训、房产家装、电商、政务等20行业领域均得到广泛应用。 微信CRM管理系统的主要功能&#xff1a; 多个微信号聚合聊天&#xff1a;解决多个微信来回切换&#xff0c;换着手着手机的麻烦…

【C++】位图

位图 1. 位图1.1 位图的概念1.1 位图的实现1.3 位图的应用 2. 布隆过滤器2.1 概念2.2 模拟实现2.3 优点和缺点2.4 应用场景2.5 哈希切分的应用 1. 位图 1.1 位图的概念 位图&#xff0c;就是用二进制位来表示数据的某种状态&#xff0c;例如判断数据是否存在&#xff0c;二进…

教你拥有一个自己的QQ机器人!0基础超详细保姆级教学!基于NoneBot2 Windows端搭建QQ机器人

0.序言 原文链接&#xff1a;教你本地化部署一个QQ机器人本教程主要面向Windows系统用户教程从0开始全程详细指导&#xff0c;0基础萌新请放心食用&#x1f355;如果你遇到了问题&#xff0c;请仔细检查是否哪一步有遗漏。如果你确定自己的操作没问题&#xff0c;可以到原文链…