【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.mzph.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;它会…

【计算机系统设计】重点 · 学习笔记(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;这就是数据缓冲。 发送的数…

Vivado工程文件分类

只需要在创建的时候&#xff0c;选择自定义路径即可&#xff0c;最好在原有的new文件夹下新建文件夹。 至于路径的匹配&#xff0c;可以自己试试&#xff0c;在原有默认new下创建文件夹&#xff0c;选中新的文件夹后&#xff0c;内部的Verilog文件可以访问外部new文件夹的文件&…

【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观

并行接口8255A 首先&#xff0c;它是传输并行数据的&#xff0c;与CPU一样&#xff0c;然后&#xff0c;它是可编程的&#xff0c;也是多功能的&#xff0c;CPU可以对其进行一些控制。 管脚 先从最宏观层面分类 一部分引脚与外设相连一部分引脚与CPU相连GND和Vcc 注意&…

【算法】【殊途同归】搜索算法之(深度优先 || 广度优先) (约束条件 || 限界函数)

对于所谓的分支限界法和回溯法&#xff0c;我们完全可以更加灵活&#xff0c;请看表格。 深度优先广度优先约束条件限界函数算法策略√√回溯法局部判定√√√分支限界法局部判定√√√加限界的回溯法局部判定√枚举法全局判定√枚举法全局判定 前两种是我们常见的&#xff0c…

【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)

什么是算法? 人生皆算法&#xff0c;算法的本质&#xff0c;是解决问题的方法&#xff0c;遇到问题&#xff0c;寻找答案&#xff0c;解决问题&#xff0c;是作为一个人&#xff0c;一生都在做的事情。 算法是人类思维的产物&#xff0c;是解决问题的方案&#xff0c;并且&a…