【Linux】Ubuntu 18下安裝Vim自動補全插件YouCompleteMe(可高速下載安裝)

前言

本文寫于2020年10月,如果你多年后看見這篇文章,方法可能已經失效,但是請牢記,盡量下載你所處時代的最新版本的軟件,會減少很多麻煩。

擺正心態

即便按照本文操作,由于你的系統狀態和我的不一樣,你依然可能安裝失敗,這個時候你需要自己慢慢使用Google搜索尋找答案。

安裝

使用的是 全新的Ubuntu 18.04 LTS,剛剛安裝好系統然后進入終端的root下操作。注意,系統版本非常重要!對應的是vim8和Python3.6.

注意!再次強調本教程在剛剛安裝好的Ubuntu18測試有效,如果你之前進行過其他配置,完全按照本教程操作,可能會遇到未知錯誤!這也是不可避免的!請自行解決。

1 安裝vim 和 git

這個很簡單,我們只需要輸入vim,系統就會提示你進行安裝,再輸入第一條命令apt install vim即可。

輸入git按照系統提示進行安裝。

2 安裝依賴軟件

輸入命令:

sudo apt-get install build-essential cmake python-dev python3-dev

3 安裝Vundle

一款vim插件管理工具,需要使用git clone進行安裝。

輸入命令,這里注意我們存的目標文件位置~/.vim/bundle/Vundle.vim
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

但是不建議直接這樣做,因為GitHub訪問太慢。

方法一:我們需要使用Google的Github加速插件,然后將地址https://github.com/VundleVim/Vundle.vim.git拿出來輸入瀏覽器地址欄中,獲得加速地址,可以使用Google瀏覽器的應用商店搜索。

還是推薦方法二,對于GitHub地址https://github.com/VundleVim/Vundle.vim.git,我們在github.com后面加上.cnpmjs.org,變成https://github.com.cnpmjs.org/VundleVim/Vundle.vim.git,然后再下載,會快很多。

此處參考:解決git clone速度慢的問題

輸入cd ~進入家目錄,再輸入vim ~/.vimrc進行vim配置,讓vim安裝該插件。注意,沒有.vimrc文件也沒事,會自動創建的,如果你不會vim基本操作,請自學。

將以下內容作為.vimrc文件的內容:

set shell=/bin/bashset nocompatible              " be iMproved, required
filetype off                  " required" set the runtime path to include Vundle and initializeset rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()
" alternatively, pass a path where Vundle should install plugins
" call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

然后在vim下輸入命令:PluginInstall安裝插件,再輸入bdelete刪除高速緩存關閉窗口,之后退出。

4 安裝YouCompleteMe

4.1 下載源文件包

下載源文件包

cd ~/.vim/bundle
git clone https://github.com/Valloric/YouCompleteMe.git

老樣子,記得在github.com后面加上.cnpmjs.org,加速下載,上面提及以后不再重復。

4.2 下載相關依賴

然后進入YouCompleteMe目錄下,之后再獲取最新版本的相關依賴文件

cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive

此處,先不要運行第二條命令,因為直接運行會非常慢

我們按照以下步驟做

  1. 運行git submodule update --init,這個過程需要等待一下。
  2. 輸入vim .gitmodules
    在這里插入圖片描述
    將里面所有的github.com都加上.cnpmjs.org,然后保存退出。
  3. 輸入git submodule sync更新子項目的url
  4. 輸入git submodule update --init --recursive
    這個時候,如果提示
    fatal: Needed a single revision Unable to find current revision in submodule path 'third_party/requests_deps/certifi'

我們需要再做一些操作,注意關注結尾的third_party/requests_deps/certifi,你的和我的可能不一樣,請使用自己的提示完成下面的步驟。

輸入rm -rf <你顯示的結尾>,這里我輸入rm -rf third_party/requests_deps/certifi

參考:git submodule update failed

然后再輸入git submodule update --init --recursive就沒有問題了。

4.3 編譯和配置支持自動補全的語言

若使用C/C++,可以安裝C族,運行./install.py --clang-completer;若安裝全部支持的語言,可以輸入./install.py --all

這里使用前者,速度較快,安裝全部用不到的話也沒必要。

完成之后,在 vim 的配置文件 ~/.vimrc 中添加一行
(在call vundle#begin() 和 call vundle#end() 之間)

call vundle#begin()
. . . 
Plugin 'Valloric/YouCompleteMe'
. . .
call vundle#end()

保存,之后安裝插件,在vim下輸入:PluginInstall,前面提及過,不再細說。

之后運行vim,提示YouCompleteMe unavailable: requires Vim 8.1.2269+,看來還需要升級vim版本阿!。

警告! 部分用戶反應卸載vim后無法再安裝,博主目前沒有遇到類似問題,因此請謹慎卸載,可以先自行查閱直接升級vim的相關操作,或者,直接用Ubuntu20吧,vim版本應該足夠了

  1. 刪除當前的所有vim版本
dpkg -l | grep vim
sudo apt-get remove vim vim-runtime vim-tiny vim-common 

注意,第二條命令,是根據第一條命令的結果設置的,博主第一條命令顯示的是這4個,所以刪除這幾個。

  1. 安裝新的vim
sudo add-apt-repository ppa:jonathonf/vim
sudo apt-get update
sudo apt-get install vim

然后,就可以愉快使用vim了

5 增強功能

.vimrc文件末尾加上:

let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'noremap <c-z> <NOP>let g:ycm_semantic_triggers =  {\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],\ 'cs,lua,javascript': ['re!\w{2}'],\ }

接下來可能還會報錯:
NoExtraConfDetected: No .ycm_extra_conf.py file detected ………………

博主這里報錯是不能找到.ycm_extra_conf.py,因此我們需要查找一下,發現它在目錄~/.vim/bundle/YouCompleteMe/third_party/ycmd中,因此我們需要再配置一下,加上一條

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'

保存退出,之后就可以愉快使用vim編輯C,CPP文件啦!

重要參考資料:在vim中配置最新YouCompleteMe代碼自動補全插件

6 可能的錯誤 和 其他資料

按照此教程,你大概率不會一帆風順,還會有各種問題……這里只能列出一些我見過的問題。

  1. SyntaxError: invalid syntax when import vimsupport
    在你的vim中運行:py3 print( __import__( 'sys' ).version ),默認python版本必須大于3.5,這個很難改好,會出現各種問題,直接按照Ubuntu 18就不會有這個問題了,更低版本的Ubuntu是默認3.5.

參考資料

  1. vim 按照插件
    如何在 Linux 上使用 Vundle 管理 Vim 插件
  2. 子模塊git clone加速問題
    github克隆項目中的子模塊submodule時遇到的問題
    徹底解決git clone以及 recursive慢的問題

核心問題總結

工具鏈的版本匹配

對于YouCompleteMe來說,它以及它依賴的一整套工具鏈,對軟件版本有很高要求,一點點不匹配就不能正常運行,因此,需要充分把握這一點。

  • Python3 >= 3.6
  • Vim >= 8.1
  • 各種依賴……

總之,這是個與時俱進的插件了。

Github快速下載

文章中已經提及了方法,不再說明。但是這一點很重要,因為在中國下載太慢了,效率極低,使用一些策略可以將下載效率提高10倍以上

不僅僅是當前文件下載,還有其相關依賴下載,也都需要提速,不過依賴的主體文件下載,不知道如何提速,該url應該隱藏在某個文件里,回頭找一找。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384677.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【操作系統】進程調度(1):FIFO(先進先出)算法 原理與實踐

0 前言 本文基于書籍《Operating System&#xff1a;Three Easy Pieces》。 中譯本&#xff1a;《操作系統導論》&#xff0c;中譯本質量還可以&#xff0c;但是英文版后來的更新&#xff0c;中文版目前沒有進行同步更新&#xff08;寫下此文的時間是2020年10月&#xff09; 1…

【操作系統】進程調度(2a):SJF(短任務優先) 算法 原理與實踐

0 前言 接上一篇文章&#xff1a;進程調度&#xff08;1&#xff09;&#xff1a;FIFO&#xff08;先進先出&#xff09;算法 原理與實踐 1 前提鋪墊 請參考上一篇文章的前提鋪墊部分&#xff0c;本文與之完全一致。 2 SJF 原理 SJF&#xff08;Shortest Job First&#x…

【操作系統】進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐

0 前言 接上一篇文章&#xff1a;進程調度&#xff08;2a&#xff09;&#xff1a;SJF&#xff08;短任務優先&#xff09; 算法 原理與實踐 1 前提鋪墊 與上一篇同。 2 STCF 原理 STCF&#xff08;Shortest Time-to-Completion First&#xff09;最短完成時間優先。 2.1…

【操作系統】進程調度(3):RR(輪轉) 算法 原理與實踐

0 前言 接上一篇文章&#xff1a;進程調度&#xff08;2b&#xff09;&#xff1a;STCF&#xff08;最短完成時間優先&#xff09; 算法 原理與實踐 1 前提鋪墊 除了與上一篇相同的&#xff0c;這里介紹新的基礎知識。 1.1 三種類型的程序 計算密集型&#xff08;CPU導向&…

【操作系統】進程調度(4):I/O、不可預測的運行時間

0 前言 上一篇文章&#xff1a;進程調度&#xff08;3&#xff09;&#xff1a;RR&#xff08;輪轉&#xff09; 算法 原理與實踐 1 前提鋪墊 與上一篇同。 2 引入I/O操作 之前我們一直提及的是計算密集型程序&#xff0c;現在我們的程序可以進行I/O交互了&#xff0c;它會…

堅定不移地加速,并且不斷解決新問題

想要更快更高效地做事&#xff0c;一定會帶來問題&#xff0c;我們要做的是 保證事情一定要做對堅定不移地解決問題&#xff0c;尋找方法&#xff0c;而不是回歸慢速 這里有幾個典型的例子 從單周期CPU&#xff0c;到多周期CPU&#xff0c;是為了提速&#xff0c;我們不必再…

運行bat批處理文件不出現黑框

if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit :CmdBegin echo off java -jar logisim118.exe exit 只需要添加上述代…

【操作系統】使用循環創建線程,一個手殘導致的bug

讓我們先看看這個手殘的程序…… 這是一個簡單的生產者消費者問題。 #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <unistd.h> #include <pthread.h> #include <sys/types.h> #incl…

【計算機系統設計】重點 · 學習筆記(0)

HDL等硬件描述語言&#xff0c;例如Verilog&#xff0c;是并行的&#xff0c;而不像軟件一樣的順序執行的&#xff0c;例如很多的always塊&#xff0c;initial塊&#xff0c;都是并行的&#xff0c;他們會轉換為硬件電路&#xff0c;而在仿真的時候&#xff0c;他們也是并發執行…

【計算機系統設計】學習筆記(1)03,04

疑問&#xff1a;sw和lw指令&#xff0c;獲取的地址不是4的整倍數&#xff08;字節不對齊&#xff09;的時候&#xff0c;應該如何處理&#xff1f; 東南大學MOCC 計算機系統綜合設計 03 03-1 寄存器 介紹了MIPS寄存器&#xff0c;32個寄存器的基本功能和使用&#xff0c;注…

【期末考試】計算機網絡、網絡及其計算 考試重點

個人簡介&#xff1a;Java領域新星創作者&#xff1b;阿里云技術博主、星級博主、專家博主&#xff1b;正在Java學習的路上摸爬滾打&#xff0c;記錄學習的過程~ 個人主頁&#xff1a;.29.的博客 學習社區&#xff1a;進去逛一逛~ 計算機網絡及其計算 期末考點 &#x1f680;數…

【計算機系統設計】學習筆記(2)

5.1 對于CPU與外界的讀寫&#xff0c;只有load和store指令能夠做&#xff0c;所以很多情況下&#xff0c;直接通過bypass跳過去了&#xff0c;或者閑置&#xff0c;尤其對于流水線&#xff0c;更應該直接跳過而不是閑置&#xff08;如何設計?&#xff09;。 另一方面&#xf…

【計算機系統設計】重點 · 學習筆記(1)(資源消耗)

這一點先淺顯理解&#xff0c;就好比我要造一個樓 我是用現成的材料造節省?還是需要用XX材料&#xff0c;但是XX材料還需要現成材料造呢&#xff1f; 這也不一定&#xff0c;但是基本來說&#xff0c;如果使用現有資源&#xff0c;能夠直接用&#xff0c;那其實是最好不過的…

【計算機系統設計】重點 · 學習筆記(0)(數據通路設計思想)

重點1&#xff1a;05.1 設計思想 設計思想至關重要&#xff0c;這決定了你能不能自己根據ISA設計出來CPU架構&#xff0c;而不是只是抄別人的&#xff0c;也決定你能不能完成自己的設計更優化的架構。 描述方式約定 6 數據通路 ≠ Verilog代碼 我們構建的數據通路&#…

【計算機系統設計】實踐筆記(1)數據通路構建:取指部件分析

0 核心思想 根據指令功能&#xff0c;分析出需求&#xff0c;從而得出需要的部件、控制信號以及其他設計。 1. 針對的指令 取指階段&#xff0c;針對所有指令&#xff0c;任何指令都需要進行取指。 2 功能&#xff08;需求&#xff09;分析 CPU的內部采用的是字節編址&…

【計算機系統設計】實踐筆記(2)數據通路構建:第一類R型指令分析(1)

0 回顧 上一次實踐筆記&#xff08;0&#xff09;我們實現了一個最簡單的&#xff0c;能夠每個上升沿4的PC。 我們最需要關注的就是器件功能的獨立性&#xff0c;避免內外功能混雜&#xff0c;同時一定要注意腦中有電路&#xff08;RTL級描述的抽象電路而不是實際的門級電路&…

接口的抽象與實現(概述)

概述 我們先建立一個整體的接口格局觀&#xff0c;建立知識地圖&#xff0c;了解接口的大概面貌。 整體來說&#xff0c;就這點事兒&#xff0c;4個箭頭代表了所有&#xff01; 三個器件4個箭頭 把這幾個都想明白&#xff0c;就完事兒了。 第一層&#xff08;頂層&#xf…

從功能層次,闡述CPU、接口和外設之間的交互

我們從功能抽象層次&#xff0c;闡述一下CPU、接口芯片和外設之間的交互情況&#xff1a; 三個器件4個箭頭 我們依次將其描述清楚。 數據 箭頭①和③ CPU給接口可以發送數據&#xff0c;然后接口暫存數據&#xff0c;之后再發給外設&#xff0c;這就是數據緩沖。 發送的數…

【接口技術】8086的IN和OUT指令

x86采用獨立編址的方式&#xff0c;IO端口地址和存儲器地址是分開的。 對于IO存儲器訪問&#xff0c;需要使用獨立的IO指令&#xff0c;也就是IN和OUT 兩類地址 地址空間大小在8位以下地址空間大小在16位以下 兩種格式 對于兩類不同的地址&#xff0c;IO指令的格式不一樣。…