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.pswp.cn/diannao/36221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36221.shtml
英文地址,請注明出處:http://en.pswp.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;可以…