先记录一下YouCompleteMe的安装过程。

按照教程进行安装

1. 安装 vundle

# vundle是vim的包管理器,十分好用
cv@cv: ~$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
cv@cv: ~$ vim ~/.vimrc

写入:

" description: configuration of vim
" author: phillee
" date: 2019-06-04
" email: phillee2016@163.com set nocompatible " be iMproved, required
filetype off " required " set the runtime path to include Vundle and initialize
set runtimepath+=/home/cv/.vim/bundle/Vundle.vim
set runtimepath+=/home/cv/.vim/bundle/ctrlp.vim
set runtimepath+=/home/cv/.vim/bundle/ultisnips call 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
Plugin 'tpope/vim-fugitive'
Plugin 'Valloric/YouCompleteMe'
Plugin 'vim-syntastic/syntastic'
Plugin 'nvie/vim-flake8' " " Track the engine
Plugin 'SirVer/ultisnips' " Snippets are separated from the engine.
Plugin 'honza/vim-snippets' " plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
" Plugin 'git://git.wincent.com/command-t.git' " git repos on your local machine(i.e. when working on your own plugin)
" Plugin 'file://home/gmarik/path/to/plugin' " The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} " Install L9 and avoid a Naming conflict if you've already install a different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'} " Define bundles via GitHub repo
Bundle 'scrooloose/nerdtree' " All of your Plugins must be added before the following line
call vundle#end() filetype plugin indent on " 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 set number
set numberwidth= set tabstop=
set background=dark
set showcmd
set encoding=utf- " Default conf file path
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
" No query for loading ycm_extra_conf.py configuration when vim is opened
let g:ycm_confirm_extra_conf= let g:ycm_use_clangd= set completeopt=longest,menu " path of python Interpreter
let g:ycm_path_to_python_interpreter='/usr/bin/python'
" Enable complete syntax
let g:ycm_seed_identifiers_with_syntax= " Enable or not complete even in the comments
let g:ycm_complete_in_comments=
let g:ycm_collect_identifiers_from_comments_and_strings=
let g:ycm_collect_identifiers_from_tags_files=
let g:ycm_min_num_of_chars_for_completion=
let g:ycm_autoclose_preview_window_after_completion=
let g:ycm_cache_omnifunc=
let g:ycm_complete_in_strings= let python_highlight_all=
syntax on
au BufNewFile,BufRead *.py
\ set tabstop= |
\ set softtabstop= |
\ set shiftwidth= |
\ set textwidth= |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix "Autoclose preview window when leave the insert mode
autocmd InsertLeave * if pumvisible()==|pclose|endif "The user-defined action of the direction keys"
inoremap <expr> <Down> pumvisible()?'\<C-n>':'\<Down>'
inoremap <expr> <Up> pumvisible()?'\<C-p>':'\<Up>'
inoremap <expr> <PageDown> pumvisible()?'\<PageDown>\<C-p>\<C-n>':'\<PageDown>'
inoremap <expr> <PageUp> pumvisible()?'\<PageUp>\<C-p>\<C-n>':'\<PageUp>' " NERDTree config
map <F2> :NERDTreeToggle<CR>
autocmd vimenter * NERDTree
autocmd StdinReadPre * let s:std_in=
autocmd VimEnter * if argc() == && !exists("s:std_in") | NERDTree | endif " This command is to open NERDTree automatically when vim starts up on opening
" a directory.
autocmd VimEnter * if argc() == && isdirectory(argv()[]) && !exists("s:std_in") | exe 'NERDTree' argv()[] | wincmd p | ene | endif " This command is to close vim if the only window left open is a NERDTree.
autocmd bufenter * if(winnr("$")== && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
let g:NERDTreeDirArrowExpandable = '~'
let g:NERDTreeDirArrowCollapsible = '~' " UltiSnips - Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
let g:UltiSnipsExpandTrigger="<c-j>"
let g:UltiSnipsListSnippets="<c-h>"
let g:UltiSnipsJumpForwardTrigger="<c-j>"
let g:UltiSnipsJumpBackwardTrigger="<c-k>"
let g:UltiSnipsSnippetDirectories=['/home/cv/.vim/bundle/ultisnips/mysnippets/'] " If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"

.vimrc

2. 安装 YouCompleteMe

cv@cv: ~$ sudo apt-get install build-essential cmake
cv@cv: ~$ sudo apt-get install python-dev python3-dev
cv@cv: ~$ cd ~/.vim/bundle/YouCompleteMe
cv@cv: ~/.vim/bundle/YouCompleteMe$ git submodule update --init --recursive
cv@cv: ~/.vim/bundle/YouCompleteMe$ ./install.py --clang-completer

3. 安装 libclang ,否则无法语义补全

cv@cv: ~/.vim/bundle/YouCompleteMe$ sudo apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev

4. 编译构建 ycm_core 库

cv@cv: ~/.vim/bundle/YouCompleteMe$ mkdir .ycm_build
cv@cv: ~/.vim/bundle/YouCompleteMe$ cd .ycm_build
cv@cv: ~/.vim/bundle/YouCompleteMe/.ycm_build$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON . ../third_party/ycmd/cpp
cv@cv: ~/.vim/bundle/YouCompleteMe/.ycm_build$ cmake --build . --target ycm_core --config Release

5. 配置文件

主要是 ~/.vimrc 和 ~/.vim/.ycm_extra_conf.py 两个文件

cv@cv: ~/.vim/bundle/YouCompleteMe/.ycm_build$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/

cv@cv: ~/.vim/bundle/YouCompleteMe/.ycm_build$ sudo vim ~/.vim/.ycm_extra_conf.py

添加 C++  头文件和 opencv 头文件索引,写入

'-isystem',
'/usr/include/c++/5.4.0',
'-isystem',
'/usr/local/include/opencv2',

6. 然后安装各种插件

有些插件需要先去 GitHub 上克隆到本地。

打开 vim ,在命令模式下键入下面的插件安装指令,等待完成。

cv@cv: ~$ vim
:PluginInstall

7. 试验一下效果

再次打开 vim ,结果最下面有提示

the ycmd server SHUT DOWN (restart with ':YcmRestartServer'). Unexpected error while ...M core library. Type ':YcmToggleLogs ycmd_41013_stderr_cys4wh16.log' to check the logs.

根据提示键入 :YcmToggleLogs ycmd_41013_stderr_cys4wh16.log

# /tmp/ycmd_41013_stderr_cys4wh16.log
Traceback (most recent call last):
File "/home/cv/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/utils.py", line , in ImportAndCheckCore
ycm_core = ImportCore()
File "/home/cv/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/utils.py", line , in ImportCore
import ycm_core as ycm_core
ImportError: /home/cv/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so: undefined symbol: clang_getCompletionFixIt

原来是 clang_getCompletionFixIt 未定义,怎么办呢?

Valloric/YouCompleteMe主页查看了一下,找到了一些线索

根据指示运行 install.sh (因为 install.py 和 install.sh 运行效果一样,当然也可以使用 cv@cv: ~$ python install.py )

cv@cv: ~$ ~/.vim/bundle/YouCompleteMe/install.sh
#!/bin/sh

echo "WARNING: this script is deprecated. Use the install.py script instead." >&

SCRIPT_DIR=$(dirname $ || exit $?)

command_exists() {
command -v "$1" >/dev/null >& ;
} PYTHON_BINARY=python
if command_exists python2; then
PYTHON_BINARY=python2
fi $PYTHON_BINARY "$SCRIPT_DIR/install.py" "$@" || exit $?

install.sh

然后就ok了,现在补全功能可以用了。

  • 如果在执行 ./install.py --clang-completer  的过程中出现HASH mismatch错误
Searching Python 2.7 libraries...
Found Python library: /usr/lib/python2./config-x86_64-linux-gnu/libpython2..so
Found Python headers folder: /usr/include/python2.
-- The C compiler identification is GNU 5.4.
-- The CXX compiler identification is GNU 5.4.
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonLibs: /usr/lib/python2./config-x86_64-linux-gnu/libpython2..so (found suitable version "
2.7.", minimum required is "2.7")
-- Downloading libclang 8.0. from https://dl.bintray.com/micbou/libclang/libclang-8.0.0-x86_64-unknown-l
inux-gnu.tar.bz2
CMake Error at ycm/CMakeLists.txt: (file):
file DOWNLOAD HASH mismatch for file: [/home/cv/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/../clang_archives/libclang-8.0.-x
86_64-unknown-linux-gnu.tar.bz2]
expected hash: [e81a186cd1180ae80c17d67d8d0c101248f8ee032d138cf6f1e95001e733249c]
actual hash: [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]
status: [;"SSL connect error"] CMake Error at ycm/CMakeLists.txt: (message):
Cannot find path to libclang in prebuilt binaries -- Configuring incomplete, errors occurred!
See also "/tmp/ycm_build_JVaiLo/CMakeFiles/CMakeOutput.log".
ERROR: the build failed. NOTE: it is *highly* unlikely that this is a bug but rather that this is a problem
with the configuration of your system or a missing dependency. Please carefully
read CONTRIBUTING.md and if you're sure that it is a bug, please raise an issue on
the issue tracker, including the entire output of this script and the invocation
line used to run it.

问题详情可以参考 GitHub上YouCompleteMe  Issues: CMake Error at ycm/CMakeLists.txt: 92(file) file DOWNLOAD HASH mismatch #2353

解决方案:可能是网络的问题,需要手动下载,放到指定位置,重新执行上面的指令即可。下载地址【 https://dl.bintray.com/micbou/libclang/ 】到网站上找到自己需要的版本下载即可。

下载完成后需要放在 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_archives 文件夹下面

mv ~/Downloads/libclang-8.0.-x86_64-unknown-linux-gnu.tar.bz2 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_archives/

Ubuntu16.04VIM无法补全错误记录的更多相关文章

  1. Sublime Text 使用 Emmet 补全错误问题

    Sublime Text安装了Emmet后,使用Tab或者ctrl+e发现补全有问题,如: div.testClass#testId 变成了 div.<testClass id="te ...

  2. 记录一次bug解决过程:else未补全导致数据泄露和代码优化

    一.总结 快捷键ctrl + alt + 四个方向键 --> 倒置屏幕 未补全else逻辑,倒置查询数据泄露 空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决 SVN冲突解决关 ...

  3. CozyRSS开发记录6-继续补全订阅内容栏

    CozyRSS开发记录6-继续补全订阅内容栏 1.订阅内容栏布局 按照之前的原型图,把订阅内容栏分成三块.Xaml如下: 2.照葫芦画瓢,完成头部和列表 头部依然使用ColorZone,右侧再放两个按 ...

  4. ROS tab键补全操作出现错误

    ros tab键补全操作出现错误如下: $ roslaunch sp[rospack] Warning: error while crawling /home/hemudu: boost::files ...

  5. Linux --- vim 安装、支持python3的配置、插件自动补全YCM的安装配置及全过程错误总结

    1.git(用来下载vim和相关插件) sudo apt-get install git 2,cmake(用来编译clang-llvm) sudo apt-get install build-esse ...

  6. 在Ubuntu16.04中python环境下实现tab键补全

    1.编写tab.py的代码: 1 #!/usr/bin/env python 2 # python startup file 3 import sys 4 import readline 5 impo ...

  7. IDEA错误的忽略了智能补全代码,导致正确的代码自动提示不出来的问题

    标题说起来有点绕,当今大部分IDE都提供 Alt+Enter 呼出自动补全菜单的功能,IDEA也不例外,今天手残了一下,具体问题如下: 1. 通常我们键入一个自定义类时IDEA会自动提示为红色,表示缺 ...

  8. 删除Chrome地址栏记录中自动补全的网址

    为了删除某个自动补全的网站,多年的历史纪录没了,还浪费我十多分钟,蠢哭_(:з」∠)_ 不是历史记录.不是清除浏览器数据.不是myactivity(谷歌账号)中的历史纪录,直接在书签中搜索,删除,OK ...

  9. centos7安装docker记录+命令补全

    原本用centos6.6部署项目环境,突然想装docker ,使用uname -r 发现内核版本太低,更新内核完后重启起不来了~~~~~,还是用回7吧 21 yum -y install gcc 22 ...

随机推荐

  1. 【Java Web开发学习】Spring消息-ActiveMQ发送消息

    ActiveMQ发送消息 转载:http://www.cnblogs.com/yangchongxing/p/9042401.html Java消息服务(Java Message Service, J ...

  2. 2019年Java并发精选面试题,哪些你还不会?(含答案和思维导图)

    Java 并发编程 1.并发编程三要素? 2.实现可见性的方法有哪些? 3.多线程的价值? 4.创建线程的有哪些方式? 5.创建线程的三种方式的对比? 6.线程的状态流转图 7.Java 线程具有五中 ...

  3. RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧

    目录 1.阅读源码之前的思考 2.从 Broker 启动流程看 DLedger 2.1 构建 DefaultMessageStore 2.2 增加节点状态变更事件监听器 2.3 调用 DefaultM ...

  4. 用正则表达式【regexp】进行高级搜索数据

    正则表达式介绍 正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词, ...

  5. jfinal shiro共享

    和上一篇tomcat sexxion共享一样,用的也是redis 代码: package com.test.shiro; import com.jfinal.log.Log; import com.j ...

  6. 阿里云linux镜像发布web项目时候 tomcat与域名映射

    tomcat 与 域名映射 一  准备工作: 阿里云服务器Linux镜像 及 域名备案和将域名解析至服务器,通过<暂不说,网上一大把或者参考阿里官方实例手册> 在Linux镜像中安装tom ...

  7. 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

  8. CTF KFIOFan: 2 Vulnhub Walkthorugh

    主机扫描: ╰─ nmap -p- -A 10.10.202.152 Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-29 16:55 CSTNm ...

  9. 如何快速将百度大脑AI技术内置智能小程序中

    实现效果: 该AI智能小程序目前集成了百度AI开放平台数十个AI服务产品功能,包括人脸识别.文字识别.表格识别.红酒识别.货币识别.地标识别.手势识别.商标识别.果蔬识别.菜品识别等图片识别功能,以及 ...

  10. AndroidStudio初识

    大家好,欢迎来到下码看花,伟大领袖毛爷爷曾经说过:“ ‘走马看花不如驻马看花,驻马看花不如下马看花.’我希望你们都要下马看花.”,比喻停下来,深入实际,认真调查研究,这就是咱们公众号名字的由来.与君初 ...