Vim使用Vundle安装代码补全插件(YouCompleteMe)
安装 Vundle
它的使用方法很简单,安装一个插件只需要在 ~/.vimrc 按照规则中添加 Plugin 的名称,某些需要添加路径,之后在 Vim 中使用:PluginInstall既可以自动化安装。

1、先新建目录

mkdir ~/.vim/bundle/Vundle.vim
2、git 克隆 Vundle 工程到本地

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
 3、修改 ~/.vimrc 配置 Plugins。在 ~/.vimrc 文件中添加如下内容并保存

Introduction:

Installation requires Git and triggers git clone for each configured repository to ~/.vim/bundle/ by default. Curl is required for search.

If you are using Windows, go directly to Windows setup. If you run into any issues, please consult the FAQ. See Tips for some advanced configurations.

Using non-POSIX shells, such as the popular Fish shell, requires additional setup. Please check the FAQ.

Set up Vundle:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Configure Plugins:

Put this at the top of your .vimrc to use Vundle. Remove plugins you don't need, they are for illustration purposes.

set nocompatible              " be iMproved, required
filetype off                  " required" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
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 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 installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}" 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

Install Plugins:

Launch vim and run :PluginInstall

To install from command line: vim +PluginInstall +qall

(optional) For those using the fish shell: add set shell=/bin/bash to your .vimrc

4、进入 vim 运行命令

:PluginInstall
Vundle 命令
# 安装插件
:BundleInstall
# 更新插件
:BundleUpdate
# 清除不需要的插件
:BundleClean
# 列出当前的插件
:BundleList
# 搜索插件
:BundleSearch
注意
插件配置不要在 call vundle#end() 之前,不然插件无法生效
如果配置错误,需要重新配置后,在vim中运行命令 :PluginInstall

使用 Vundle 安装 YouCompleteMe
在 ~/.vimrc 中添加如下内容 位置在call vundle#begin()和call vundle#end()之间

Bundle 'Valloric/YouCompleteMe'
在vim中运行以下命令就会自行安装,安装时间有点长,请耐心等待

:BundleInstall
安装完成后需要编译 YouCompleteMe
编译过程需要CMake,没有安装CMake可使用以下命令进行安装

sudo apt install cmake
然后切换到以下目录

cd ~/.vim/bundle/YouCompleteMe 
最后输入以下命令即可(默认支持python)

./install.sh

不需要语义补全:

[cpp] view plain copy print?

  1. cd ~/.vim/bundle/YouCompleteMe
  2. ./install.py

需要语义补全的:

[cpp] view plain copy print?

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

过程有点漫长,

配置 YouCompleteMe
在 ~/.vimrc 中添加配置

" 自动补全配置
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"上下左右键的行为 会显示其他信息
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>""youcompleteme 默认tab s-tab 和自动补全冲突
"let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
"let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic
"nnoremap <leader>lo :lopen<CR> "open locationlist
"nnoremap <leader>lc :lclose<CR> "close locationlist
inoremap <leader><leader> <C-x><C-o>
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处

到此,YouCompleteMe 已安装成功。

YouCompleteMe启用

vim ~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py

 77 #Add your flags to this list.78 flags = [79         '-x',80         'c++',81         '-isystem',82         '/usr/include',83         '-isystem',84         '/usr/local/include',85         '-isystem',86         '/usr/include/c++/9',87         '-isystem',88         '/usr/include',89         '/usr/include/x86_64-linux-gnu/c++',90 ]91 92 #def FlagsForFile(filename):93 #    return {'flags': flags}94 95 def Settings( **kwargs ):96     return { 'flags': flags }
# This file is NOT licensed under the GPLv3, which is the license for the rest
# of YouCompleteMe.
#
# Here's the license text for this file:
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>from distutils.sysconfig import get_python_inc
import platform
import os.path as p
import subprocessDIR_OF_THIS_SCRIPT = p.abspath( p.dirname( __file__ ) )
DIR_OF_THIRD_PARTY = p.join( DIR_OF_THIS_SCRIPT, 'third_party' )
DIR_OF_WATCHDOG_DEPS = p.join( DIR_OF_THIRD_PARTY, 'watchdog_deps' )
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]database = None# These are the compilation flags that will be used in case there's no
# compilation database set (by default, one is not set).
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
# You 100% do NOT need -DUSE_CLANG_COMPLETER and/or -DYCM_EXPORT in your flags;
# only the YCM source code needs it.
'-DUSE_CLANG_COMPLETER',
'-DYCM_EXPORT=',
'-DYCM_ABSEIL_SUPPORTED',
# THIS IS IMPORTANT! Without the '-x' flag, Clang won't know which language to
# use when compiling headers. So it will guess. Badly. So C++ headers will be
# compiled as C headers. You don't want that so ALWAYS specify the '-x' flag.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-isystem',
'cpp/absl',
'-isystem',
'cpp/pybind11',
'-isystem',
'cpp/whereami',
'-isystem',
'cpp/BoostParts',
'-isystem',
get_python_inc(),
'-isystem',
'cpp/llvm/include',
'-isystem',
'cpp/llvm/tools/clang/include',
'-I',
'cpp/ycm',
'-I',
'cpp/ycm/ClangCompleter',
'-isystem',
'cpp/ycm/tests/gmock/googlemock/include',
'-isystem',
'cpp/ycm/tests/gmock/googletest/include',
'-isystem',
'cpp/ycm/benchmarks/benchmark/include',
'-std=c++17',#自己定义'-I','/home/mumu/Lars/base/mysql-connector-c/include','-I','/home/mumu/Lars/base/mysql-connector-c/include/mysql','-I','/home/mumu/Lars/base/mysql-connector-c/include/mysql/psi','-I','/home/mumu/Lars/base/proto','-I','/home/mumu/Lars/lars_dns/include','-I','/home/mumu/Lars/lars_reactor/example/qps_test','-I','/home/mumu/Lars/lars_reactor/include','-I','~/Lars/lars_reporter/include',]# Set this to the absolute path to the folder (NOT the file!) containing the
# compile_commands.json file to use that instead of 'flags'. See here for
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
#
# You can get CMake to generate this file for you by adding:
#   set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
# to your CMakeLists.txt file.
#
# Most projects will NOT need to set this to anything; you can just change the
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
compilation_database_folder = ''def IsHeaderFile( filename ):extension = p.splitext( filename )[ 1 ]return extension in [ '.h', '.hxx', '.hpp', '.hh' ]def FindCorrespondingSourceFile( filename ):if IsHeaderFile( filename ):basename = p.splitext( filename )[ 0 ]for extension in SOURCE_EXTENSIONS:replacement_file = basename + extensionif p.exists( replacement_file ):return replacement_filereturn filenamedef PathToPythonUsedDuringBuild():try:filepath = p.join( DIR_OF_THIS_SCRIPT, 'PYTHON_USED_DURING_BUILDING' )with open( filepath ) as f:return f.read().strip()except OSError:return Nonedef Settings( **kwargs ):# Do NOT import ycm_core at module scope.import ycm_coreglobal databaseif database is None and p.exists( compilation_database_folder ):database = ycm_core.CompilationDatabase( compilation_database_folder )language = kwargs[ 'language' ]if language == 'cfamily':# If the file is a header, try to find the corresponding source file and# retrieve its flags from the compilation database if using one. This is# necessary since compilation databases don't have entries for header files.# In addition, use this source file as the translation unit. This makes it# possible to jump from a declaration in the header file to its definition# in the corresponding source file.filename = FindCorrespondingSourceFile( kwargs[ 'filename' ] )if not database:return {'flags': flags,'include_paths_relative_to_dir': DIR_OF_THIS_SCRIPT,'override_filename': filename}compilation_info = database.GetCompilationInfoForFile( filename )if not compilation_info.compiler_flags_:return {}# Bear in mind that compilation_info.compiler_flags_ does NOT return a# python list, but a "list-like" StringVec object.final_flags = list( compilation_info.compiler_flags_ )# NOTE: This is just for YouCompleteMe; it's highly likely that your project# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.try:final_flags.remove( '-stdlib=libc++' )except ValueError:passreturn {'flags': final_flags,'include_paths_relative_to_dir': compilation_info.compiler_working_dir_,'override_filename': filename}if language == 'python':return {'interpreter_path': PathToPythonUsedDuringBuild()}return {}def PythonSysPath( **kwargs ):sys_path = kwargs[ 'sys_path' ]interpreter_path = kwargs[ 'interpreter_path' ]sys_path[ 0:0 ] = [ p.join( DIR_OF_THIS_SCRIPT ),p.join( DIR_OF_THIRD_PARTY, 'bottle' ),p.join( DIR_OF_THIRD_PARTY, 'regex-build' ),p.join( DIR_OF_THIRD_PARTY, 'frozendict' ),p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'jedi' ),p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'parso' ),p.join( DIR_OF_WATCHDOG_DEPS, 'watchdog', 'build', 'lib3' ),p.join( DIR_OF_WATCHDOG_DEPS, 'pathtools' ),p.join( DIR_OF_THIRD_PARTY, 'waitress' ) ]sys_path.append( p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'numpydoc' ) )return sys_path

Vim使用Vundle安装代码补全插件(YouCompleteMe)相关推荐

  1. Vim中的Java代码补全插件

    Vim中的Java代码补全插件 最近在学习用vim写Java代码,用惯了idea,发现vim也太简陋了.后来在网上搜,看到不少文章介绍这个Javacomplete : Omni Completion ...

  2. Vim中安装自动补全插件YouCompleteMe

    前言 自动补全:YouCompleteMe可以说是Vim中最好用的插件了,但是它的安装也可以说的上是Vim中最难的一个了.往往会出现各种错误,在还没有享受到这个插件给我们带来的快感时就会被安装的各种错 ...

  3. 通过vimplus安装vim代码补全插件YouCompleteMe

    项目地址:https://github.com/chxuan/vimplus git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ...

  4. YCM代码补全插件找不到c++头文件

    开发环境: Ubuntu22.04 LTS x86_64架构Intel CPU YCM(YouCompleteMe)是一款用于vim编辑器的强大代码补全插件. YCM提供许多强大功能: 代码补全: 语 ...

  5. Sublime text代码补全插件(支持Javascript、JQuery、Bootstrap框架)

    Sublime text代码补全插件(支持Javascript.JQuery.Bootstrap框架)   插件名称:javascript-API-Completions 支持Javascript.J ...

  6. vim win装_VIM的代码补全工具YouCompleteMe在Windows上的安装攻略

    前言 用VIM写代码也有很多年了,一直使用其内嵌的自动补全.这种补全没有任何语义分析,仅仅根据当前打开的文件,收集所有的单词形成一个补全库.在输入时,根据已经输入的字母,用逐个字母匹配的方式来寻找可能 ...

  7. 【Linux】Ubuntu 18下安装Vim自动补全插件YouCompleteMe(可高速下载安装)

    前言 本文写于2020年10月,如果你多年后看见这篇文章,方法可能已经失效,但是请牢记,尽量下载你所处时代的最新版本的软件,会减少很多麻烦. 摆正心态 即便按照本文操作,由于你的系统状态和我的不一样, ...

  8. Vim代码补全插件:YouCompleteMe

    Vim的代码补全一般有两种实现方案: 1. 第一种是采用ctags + OmniCppComplete ,参考:http://blog.chinaunix.net/uid-20737871-id-34 ...

  9. 图片高亮处理编程_GMT语法高亮-智能提示-代码补全插件

    GMT(Generic Mappint Tools)是地学界应用非常广泛的一款绘图兼数据处理的开源软件.其开发团队也是非常活跃,此软件还在不断的发展和更新中,变得越来越强大.目前已经有164个模块,而 ...

最新文章

  1. 数据降维工具箱drtoolbox
  2. 【阿里云课程】如何基于GAN完成人脸图像超分辨任务
  3. S3 Texture Compression
  4. MySQL笔记之视图的使用详解
  5. 第五章 了解你的用户
  6. 工具资源系列之 github 上各式各样的小徽章从何而来?
  7. Linux内核中断引入用户空间(异步通知机制)【转】
  8. 我的YUV播放器MFC小笔记:unicode编码、宽字符
  9. 《『若水新闻』客户端开发教程》——03.设计新闻分类UI(1)
  10. JAVA屏幕截图与水印添加程序-HEHEHEScreenshot
  11. c++ 检查远程主机端口_漏洞通告:Windows RDP服务远程代码执行漏洞通告(CVE-2019-0708)...
  12. OpenCV python 轮廓的极值点
  13. 沉默的大多数(王小波)
  14. mac 强制关闭程序
  15. Linux放行单个8080端口和放行8000-9000端口区间
  16. 腾讯云运维工程师认证TCA原题(2)
  17. VR和云服务,使出洪荒之力也难擦出火花
  18. 简单的汇率转换工具---初试AJAX
  19. Java之类和对象(超超超详解)
  20. 实用新型申请的时间、流程、费用是怎样的?

热门文章

  1. SpringBoot banner佛祖
  2. SPFA 算法详解( 强大图解,不会都难!) (转)
  3. codeforces 1373C (数学)
  4. Linux SSH免密码登录与拷贝文件(SCP)
  5. 算法:动态规划经典题目
  6. OpenCV图像基本处理
  7. 《MongoDB入门教程》第01篇 MongoDB简介
  8. ASP PHP和JSP三大动态网页技术
  9. pip3 设置阿里云
  10. mysql如何开启慢查询_MySQL如何开启慢查询 MySQL开启慢查询方法