YouCompleteMe插件安装方法简述

一、前言

YouCompleteMe是VIM中进行C/C++ 开发的重要工具,可以极大提升linux下C/C++开发效率。

YCM需要高版本的gcc (8.0以上版本,支持C++17) 和 vim(8.0以上,支持python3.6以上)

二、编译gcc_8.3

1. 获取源码

  wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.xz -P ~

  tar xvf gcc-8.3.0.tar.xz -C ~

  cd ~/gcc-8.3.0

2. 运行 download_prerequisites 脚本

  ./contrib/download_prerequisites

3. 创建编译目录

  mkdir build-gcc-8.3.0

  cd build-gcc-8.3.0

4. 配置

  ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix=/home/jello/gcc (注意替换一下红色的用户名噢)

5. 编译

  make -j4

6. 安装

  make install

三、编译YCM

1.下载Vundle和YouCompleteMe插件

输入以下指令,下载Vundle

git clone GitHub - VundleVim/Vundle.vim: Vundle, the plug-in manager for Vim ~/.vim/bundle/Vundle.vim

2.下载成功后,在用户根目录下面,修改.vimrc文件,追加下面语句以便后续安装YouCompleteMe插件

set nocompatible

filetype off

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

Plugin ‘Valloric/YouCompleteMe’

call vundle#end()

filetype plugin indent on

3.编译YouCompleteMe

在编译之前下载编译工具,准备编译YouCompleteMe

yum install gcc gcc-c++ cmake python-devel

4.编译YouCompleteMe使其支持C/C++ 自动补全

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

四、编译binutils_2.29

编译vim时出现连接python库失败,原因是系统的binutils版本低了,因此需要编译安装binutils

1. 下载

wget http://ftp.gnu.org/gnu/binutils/binutils-2.29.tar.gz ./

2. 编译安装

unzip binutils-2.29.tar.gz

cd binutils-2.29

./configure --prefix=/data/jzying/opt

make -j && make install

五、编译vim_8.2

1、下载
git clone GitHub - vim/vim: The official Vim repository

2、编译:

注意vim只能安装到/usr开头的目录内

rm -fr /usr/local/vim8

mkdir -p /usr/local/vim8

cd vim/src

./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-python3interp=yes \
--with-python3-config-dir=$(python3-config --configdir) \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr/local'

其中:/usr/local/python3.6.8是python3的安装路径(python3要以--enable-shared参数安装,如果是python3.6.5以上,还需要指定:--with-openssl参数,下面会有原因说明)

----暂时不需要的config参数
--enable-rubyinterp
--enable-luainterp
--enable-perlinterp
--with-python3-config-dir=/opt2/python-3.6.5/lib/python3.6/config-3.6m-x86_64-linux-gnu
--with-python3-config-dir=/usr/local/python3.7.2/lib/python3.7/config-3.7m-x86_64-linux-gnu \

make && make install

tips:(如果make的时候出错,执行make distclean)
make distclean、


3、创建软连接
mv /usr/bin/vim /usr/bin/vim_bak
ln -sf /usr/local/vim8/bin/vim /usr/bin/vim

4、查看当前vim版本是否支持python3
vim --verison | grep python3

5、测试:
python3 import subprocess;print(subprocess)

安装jedi,jedi-vim和YouCompleteMe 都依赖这个模块来完成自动提示
pip install jedi

六、配套插件安装

1、CompleteParameter.vim

YCM使用中有个不方便的地方,是对于函数参数的提示不能持续的提示,再输入完函数名称后提示就会关闭,但可以通过该插件一定程度缓解这个问题

插件地址:GitHub - tenfyzhong/CompleteParameter.vim: Complete parameter after select the completion. Integration with YouCompleteMe(ycm), deoplete, neocomplete.

安装方法:下载代码后,拷贝到bundle目录,并在vimrc里面配置插件

配置参数:

inoremap <silent><expr> ( complete_parameter#pre_complete("()")
smap <c-j> <Plug>(complete_parameter#goto_next_parameter)
imap <c-j> <Plug>(complete_parameter#goto_next_parameter)
smap <c-k> <Plug>(complete_parameter#goto_previous_parameter)
imap <c-k> <Plug>(complete_parameter#goto_previous_parameter)

七、问题解决

1. 如果出现 AttributeError: 'module' object has no attribute 'FlagsForFile' 错误

需要添加一个配置文件,在这里添加一个 C family 类型文件模板

import os import ycm_core flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-ferror-limit=10000',
'-DNDEBUG',
'-std=c99',
'-xc',
'-isystem/usr/include/',
]

SOURCE_EXTENSIONS = [
'.cpp',
'.cxx',
'.cc',
'.c',
]
def FlagsForFile( filename, **kwargs ):
return {
'flags': flags,
'do_cache': True
}

将以上代码写入到这个文件~/.ycm_c-c++_conf.py

打开 .vimrc 配置文件 加入如下语句:

let g:ycm_global_ycm_extra_conf = "~/.ycm_c-c++_conf.py"

2. 未定义的符号错误:youcompleteme unavailable undefined symbol pyunicode_fromformat

原因:编译后,vim 需要用到:/usr/local/python3.6.8/lib/python3.6/lib-dynload/*.so动态库,

而这些动态库需要python主库的一些symbol,在vim里找不到。

解决方法参考:Issues · vim/vim · GitHub LDFLAGS="-rdynamic",因为vim中把python的库当做动态库来使用,而实际链接的库确实静态库,rdynamic可以将所有的第三方库符号一次性加载到符号表,避免出现符号未定义的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shopee API接口——获取商家店铺商品列表

一、引言 在跨境电商领域&#xff0c;Shopee作为东南亚地区领先的电商平台&#xff0c;为众多商家提供了广阔的市场和丰富的销售机会。本文将详细介绍如何通过Shopee API获取商家店铺商品列表&#xff0c;并探讨其应用场景。 二、核心功能介绍 Shopee API获取商家店铺商品列…

HarmonyOS NEXT Developer Beta1中的Kit

从HarmonyOS NEXT Developer Preview1&#xff08;API 11&#xff09;版本开始&#xff0c;HarmonyOS SDK以Kit维度提供丰富、完备的开放能力&#xff0c;涵盖应用框架、系统、媒体、图形、应用服务、AI六大领域&#xff0c;例如&#xff1a; 应用框架相关Kit开放能力&#xff…

转行大数据开发:知识、能力及学习路线详解

引言 随着数据量的爆炸性增长&#xff0c;大数据开发已经成为IT行业中的热门职业。对于希望转行进入大数据开发领域的专业人士来说&#xff0c;了解需要掌握的知识和技能&#xff0c;并制定清晰的学习路线至关重要。本文将详细解析转行大数据开发所需的知识体系、能力要求及学…

Studying-代码随想录训练营day21| 669.修建二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、二叉树总结

第21天&#xff0c;二叉树最后一篇&#xff0c;冲&#x1f4aa; 目录 669.修建二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 二叉树总结 669.修建二叉搜索树 文档讲解&#xff1a;代码随想录修建二叉搜索树 视频讲解&#xff1a;手撕修建二叉…

【PySide6】Repeater 子控件分析

文章目录 前言分析 前言 修改 Column 控件下使用 Repeater 生成的子控件&#xff0c;但是没有 id 无法操作&#xff0c;使用 children 层层递归分析 分析 QML 代码 // https://doc.qt.io/qt-6/qml-qtquick-column.htmlColumn {id: columnspacing: 2// 定义模型property var …

代码随想录算法训练营刷题复习10:二叉树、二叉搜索树复习2

二叉树、二叉搜索树 力扣题复习 110. 平衡二叉树257. 二叉树的所有路径404. 左叶子之和513. 找树左下角的值112.路径之和113.路经总和ii450. 删除二叉搜索树中的节点701. 二叉搜索树中的插入操作 110. 平衡二叉树 左右子树高度差要小于1 ->递归调用&#xff08;need新的函…

API-元素尺寸与位置

学习目标&#xff1a; 掌握元素尺寸与位置 学习内容&#xff1a; 元素尺寸与位置仿京东固定导航栏案例实现bilibili点击小滑块移动效果 元素尺寸与位置&#xff1a; 使用场景&#xff1a; 前面案例滚动多少距离&#xff0c;都是我们自己算的&#xff0c;最好是页面滚动到某个…

[leetcode]圆圈中最后剩下的数字/ 破冰游戏

. - 力扣&#xff08;LeetCode&#xff09; class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };

程序猿大战Python——Python与MySQL交互一

pymysql模块的安装 目标&#xff1a;了解如何安装pymysql模块&#xff1f; 当要使用Python和MySQL数据库进行交互&#xff0c;需要借助一个第三方模块&#xff1a;pymysql。 在使用pymysql模块前&#xff0c;先进行安装&#xff1a; pip install pymysql 有时使用pip instal…

从零开始做题:有手就行

1 题目 2 解题 ARPHCR工具破解 得到flag DASCTF{2b3767763885a019b65bbfe9d1136c3b}

数据结构与算法笔记:高级篇 - 向量空间:如何实现一个简单的音乐推荐系统?

概述 很多人喜都喜爱听歌&#xff0c;以前我们用 MP3 听歌&#xff0c;现在直接通过音乐 App 在线就能听歌。而且&#xff0c;各种音乐 App 的功能越来越强大&#xff0c;不仅可以自己选歌听&#xff0c;还可以根据你听歌的喜好&#xff0c;给你推荐你可能会喜好的音乐&#x…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

DevExpress Office File API教程 - 如何使用AI服务增强Word文档可访问性和语言支持?

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

使用隐式事件执行控制图

什么是隐式事件&#xff1f; 隐式事件是图表执行时发生的内置事件&#xff1a; 图表唤醒 进入一个状态 退出状态 分配给内部数据对象的值 这些事件是隐式的&#xff0c;因为您没有显式地定义或触发它们。隐式事件是它们发生的图表的子级&#xff0c;仅在父图表中可见。 隐式事…

【AI生成】海上风电中卫星网络与无线自组网的应用分析

随着可再生能源的不断发展&#xff0c;海上风电作为其中的重要组成部分&#xff0c;在我国能源结构调整中占据越来越重要的地位。近年来&#xff0c;我国海上风电产业发展迅速&#xff0c;海上风电场数量和规模不断扩大&#xff0c;相应地&#xff0c;海上风电运维和安全保障的…

git branch -a 不显示远程分支修复

使用git remote -v命令&#xff0c;查看所有的远程仓库及其URL如果没有&#xff0c;说明没有远程仓库&#xff0c;继续往下走使用git remote add origin <url>命令来添加或修改远程仓库&#xff1a;其中<url>是远程仓库的正确URL&#xff0c;就是git项目的http的地…

实现Java中的图像处理功能

实现Java中的图像处理功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在本篇文章中&#xff0c;我们将探讨如何在Java中实现图像处理功能。图像处理是计算机…

Embedding的概念和展开

前言 本章&#xff0c;我们介绍一个非常细的细节技术。让我们微调大模型的一些特性和能力。 在大模型的AI套路演化过程中&#xff0c;其实经历了太多的技术革新和方式变化&#xff0c;Embedding其实也可能是其中一个高速湮灭的技术点之一。 对比LoRA现在大红大紫&#xff0c…

每个 Node.js 开发人员都应该知道的13个库(下)

7. Sequelize Mongoose是一个Node。基于js的MongoDB对象建模工具&#xff0c;通常被称为对象数据建模&#xff08;ODM&#xff09;库&#xff0c;它提供了诸如钩子、模型验证、连接和查询等功能。 Mongoose为应用程序数据提供了一个基于模式的解决方案&#xff0c;它在应用程…

【JavaScript脚本宇宙】玩转数据存储:深入剖析提升 Web 应用程序性能的六大利器

从本地到云端&#xff1a;全面解析满足各种需求的高性能 JavaScript 数据库库 前言 本文将介绍几个流行的JavaScript数据库库&#xff0c;包括localForage、Dexie.js、PouchDB、LokiJS和NeDB。每个库都有自己的特点和适用场景。通过比较它们的功能和使用方式&#xff0c;可以…