博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装
阅读量:6182 次
发布时间:2019-06-21

本文共 10842 字,大约阅读时间需要 36 分钟。

作者: 

1.需要保证vim的版本大于7.3.584,否则的话需要更新vim

可以通过第三方源更新:

在终端输入下面的代码:

$ sudo add-apt-repository ppa:fcwu-tw/ppa$ sudo apt-get update$ sudo apt-get install vim

升级得到vim7.4

 

2.需要有clang3.2以上的库

可以再此处下载:

可以下载已经变编译好的clang3.4,并注意操作系统版本

 

3.安装vundle插件

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

并配置.vimrc

set nocompatible "与vi不一致filetype offset rtp+=~/.vim/bundle/vundle/ "载入特定目录插件"set rtp+=$HOME/.vim/bundle/vundle/ "Windows下call vundle#rc()"plugin "vimscripts账号下的项目直接填写名称即可Bundle 'snipMate'"其它需填写用户/资源名称Bundle 'gmarik/vundle'"非github上资源Bundle 'git://git.wincent.com/command-t.git'"indentBundle 'php.vim-html-enhanced'"colorBundle 'Lucius'filetype plugin indent on

 

4.利用vundle插件安装YouCompleteMe和syntastic插件:

在.vimrc中添加

Bundle 'https://github.com/Valloric/YouCompleteMe.git'Bundle 'https://github.com/scrooloose/syntastic.git'

然后在vim中执行:Vundle Install!

即可安装好这两个插件,安装YouCompleteMe的过程很漫长

可以直接在~/.vim/bundle/目录下,执行:

sudo git clone https://github.com/Valloric/YouCompleteMe.gitsudo git submodule update --init --recursive

也可以得到同样的效果。其中第二行是递归的更新子文件夹的内容。

 

5.编译YouCompleteMe插件

首先需要安装CMAKE

sudo apt-get install cmake

 

然后在家目录下建立一个ycm_build文件夹

cd ~mkdir ycm_buildcd ycm_build

然后cmke使用cmake命令生成makefile文件:

cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

此处需要注意的是需要修改DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir,令其等于clang3.4的路径。

如果遇到Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)的错误,可以安装python-dev

sudo apt-get install python-dev

 

然后make编译

 

make ycm_support_libs

即可生成编译后的库文件。

最后回到YouCompleteMe目录下:

执行

cd ~/.vim/bundle/YouCompleteMesudo ./install.sh --clang-completer --system-clang

即可完成。

6.配置自动补全python脚本:

在~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/路径下的.ycm_extra_conf.py文件中

删除.ycm_extra_conf.py中的

# 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% YOU NEED IT.
try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass

将之删除后YCM才会补全c++标准库的内容。

并添加

'/usr/include',

'-isystem',
'/usr/include/c++/'

到flags列表中使其可以补C++库中的头文件。

7.最终更改~/.vimrc的配置文件:

set nocompatible               " be iMprovedfiletype off                   " required! set rtp+=~/.vim/bundle/vundle/call vundle#rc() " let Vundle manage Vundle" required! Bundle 'gmarik/vundle' " My Bundles here:"" original repos on githubBundle 'tpope/vim-fugitive'Bundle 'Lokaltog/vim-easymotion'Bundle 'rstacruz/sparkup', {
'rtp': 'vim/'}Bundle 'tpope/vim-rails.git'" vim-scripts reposBundle 'L9'Bundle 'FuzzyFinder'" non github reposBundle 'git://git.wincent.com/command-t.git'" My pluginBundle 'perl-support.vim'Bundle 'ctags.vim'Bundle 'taglist.vim'Bundle 'https://github.com/Lokaltog/vim-powerline.git'Bundle 'LaTeX-Suite-aka-Vim-LaTeX'Bundle 'Simple-R-Omni-Completion'"Bundle 'Pydiction'Bundle 'The-NERD-tree'Bundle 'Tagbar'Bundle 'asins/vimcdoc'Bundle 'cpp.vim'Bundle 'c.vim'Bundle 'code_complete'Bundle 'autoproto.vim'Bundle 'a.vim'Bundle 'pyflakes.vim'Bundle 'Conque-Shell'Bundle 'python.vim'Bundle 'multvals.vim'Bundle 'gdbvim'Bundle 'glib.vim'Bundle 'VimIM'Bundle 'OmniCppComplete'Bundle 'echofunc.vim'"Bundle 'clang-complete'"Bundle 'pythoncomplete'Bundle 'minibufexpl.vim'Bundle 'https://github.com/Valloric/YouCompleteMe.git'Bundle 'https://github.com/scrooloose/syntastic.git'"Bundle 'https://github.com/Valloric/ListToggle.git'"Bundle 'Valloric/YouCompleteMe'"Bundle 'qiushibaike'filetype plugin indent on " required!"" Brief help -- 此处后面都是vundle的使用命令" :BundleList - list configured bundles" :BundleInstall(!) - install(update) bundles" :BundleSearch(!) foo - search(or refresh cache first) for foo" :BundleClean(!) - confirm(or auto-approve) removal of unused bundles"" see :h vundle for more details or wiki for FAQ" NOTE: comments after Bundle command are not allowed..""set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set showmatchset matchtime=1set autowriteset ruler " 打开状态栏标尺set cursorline " 突出显示当前行nnoremap
:g/^\s*$/d
set laststatus=1 "启动显示状态行(1),总是显示状态行(2) set foldenable " 允许折叠 "set foldmethod=indent " 手动折叠 set nuset fileencodings=utf-8,ucd-bom,gb18030,gbk,gb2312,cp936set tabstop=4set sts=4set expandtab set softtabstop=4set shiftwidth=4set autoindentset cindentset cinoptions={
0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1scolorscheme desertset nobackupset textwidth=100map
:! /usr/bin/python %map
:call CompileRunGpp()
""""""""""syntastic""""""""""""let g:syntastic_check_on_open = 1let g:syntastic_cpp_include_dirs = ['/usr/include/']let g:syntastic_cpp_remove_include_errors = 1let g:syntastic_cpp_check_header = 1let g:syntastic_cpp_compiler = 'clang++'let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'"set error or warning signslet g:syntastic_error_symbol = "✗"let g:syntastic_warning_symbol = "⚠" "whether to show balloonslet g:syntastic_enable_balloons = 1let g:syntastic_always_populate_loc_list = 1nnoremap
:lclose
:bdelete
cabbrev
bd lclose\|bdelete""""""""""""YCM""""""""""""""""""""let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'let g:ycm_collect_identifiers_from_tags_files = 1let g:ycm_seed_identifiers_with_syntax = 1let g:ycm_confirm_extra_conf = 0let g:ycm_always_populate_location_list = 1let g:ycm_min_num_of_chars_for_completion = 2let g:ycm_complete_in_comments = 1nnoremap
jd :YcmCompleter GoToDefinitionElseDeclaration
nnoremap
lo :lopen
"minibufexpl"{ let g:miniBufExplMapCTabSwitchBufs = 1let g:miniBufExplMapWindowNavVim = 1"}""pydiction"{ "filetype plugin on"let g:pydiction_location='~/.vim/bundle/Pydiction/complete-dict'"}"" OmniCppComplete"" {" "-- omnicppcomplete setting --" " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码" imap
" " 按下F2根据头文件内关键字补全" imap
" set completeopt=menu,menuone " 关掉智能补全时的预览窗口" let OmniCpp_MayCompleteDot = 1 " autocomplete with ." let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->" let OmniCpp_MayCompleteScope = 1 " autocomplete with ::" let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)" let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files" let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window" let OmniCpp_GlobalScopeSearch=1 " enable the global scope search" let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members "let OmniCpp_DefaultNamespaces=["std"]" let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column" let OmniCpp_ShowAccess=1 " set tags+=/usr/include/c++/tags "need to ctags -R --c++-kinds=+p --fields=+iaS --extra=+q" }" echofunc.vim" { " }"vimIM"{ let g:vimim_cloud='sogou'let g:vimim_map='tab_as_onekey'let g:vimim_map='no-gi'let g:vimim_map_extra='ctrl_h_as_ctrl_bslash'"let g:vimim_static_input_style=1let g:vimim_toggle = 'pinyin,sogou,baidu' let g:vimim_plugin = '/home/liuyi/.vim/bundle/VimIM/plugin' "}""" Bundle 'clang-complete'"" {"let g:clang_auto_select = 1"let g:clang_complete_copen=1"let g:clang_periodic_quickfix=1"let g:clang_snippets=1"let g:clang_snippets_engine = 'clang_complete'"let g:clang_close_preview=1"let g:clang_use_library=1"let g:clang_user_options='-stdlib=libc++ -std=c++11 -IIncludePath'"let g:neocomplcache_enable_at_startup = 1"" }"pyflakes python语法分析"{ "filetype plugin indent on"}"python_complete"{ set ofu=syntaxcompleteautocmd FileType python set omnifunc=pythoncomplete"autocmd FileType python runtime! autoload/pythoncomplete.vim"}""tagbar"{ "nmap
tb :TagbarToggle
map
:TagbarToggle
imap
:NERDTreeToggle
let g:tagbar_ctags_bin='/usr/bin/ctags'let g:tagbar_width=30autocmd BufReadPost *.cpp, *.c, *.h, *.hpp, *.cc, *.cxx call tagbar#autoopen()"}"omni-completion"{ "autocmd FileType python set omnifunc=pythoncomplete#Complete "let g:pydiction_location='~/.vim/bundle/Pydiction/complete-dict' filetype plugin on"}"taglist"{ let Tlist_Auto_Highlight_Tag=1 "let Tlist_Auto_Open=1 let Tlist_Auto_Update=1 let Tlist_Display_Tag_Scope=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Enable_Dold_Column=1 "let Tlist_File_Fold_Auto_Close=1 let Tlist_Show_One_File=1 let Tlist_Use_Right_Window=1 let Tlist_Use_SingleClick=1 "nnoremap
tl :TlistToggle
"设定F8为taglist开关"}"Nerd-tree"{ map
:NERDTreeToggle
imap
:NERDTreeToggle
"}"WinManager"{ let g:winManagerWindowLayout='FileExplorer|BufExplorer' " 这里可以设置 为多个窗口, 如'FileExplorer|BufExplorer|TagList'let g:persistentBehaviour=0 " 只剩一个窗口时, 退出vim.let g:winManagerWidth=20let g:defaultExplorer=1nmap
fir :FirstExplorerWindow
nmap
bot :BottomExplorerWindow
nmap
wm :WMToggle
"}"runtime! ftplugin/man.vimset hlsearchset autoindent " copy indent from current lineset autoread " read open files again when changed outside Vimset autowrite " write a modified buffer on each :next , ...set backspace=indent,eol,start " backspacing over everything in insert mode"set backup " keep a backup fileset browsedir=current " which directory to use for the file browserset complete+=k " scan the files given with the 'dictionary' optionset history=50 " keep 50 lines of command line historyset hlsearch " highlightthe last used search patternset incsearch " do incremental searchingset listchars=tab:>.,eol:\$ " strings to use in 'list' modeset mouse=a " enable the use of the mouseset wrap " wrap linesset popt=left:8pc,right:3pc " print optionsset ruler " show the cursor position all the time"set shiftwidth=2 " number of spaces to use for each step of indentset showcmd " display incomplete commandsset smartindent " smart autoindenting when starting a new line"set tabstop=2 " number of spaces that a
counts forset visualbell " visual bell instead of beepingset wildignore=*.bak,*.o,*.e,*~ " wildmenu: ignore these extensionsset wildmenu " command-line completion in an enhanced modeset formatoptions=tcrqn""-------------------------------------------------------------------------------" highlight paired brackets"-------------------------------------------------------------------------------highlight MatchParen ctermbg=blue guibg=lightyellowinoremap , ,
""-------------------------------------------------------------------------------" autocomplete parenthesis, (brackets) and braces"-------------------------------------------------------------------------------inoremap ( ()
inoremap [ []
inoremap { {}
"vnoremap ( s()
P
%vnoremap [ s[]
P
%vnoremap { s{}
P
%"" surround content with additional spaces"vnoremap ) s( )
P
%vnoremap ] s[ ]
P
%vnoremap } s{ }
P
%set vb t_vb="" vim-powerlineset laststatus=2set t_Co=256let g:Powerline_symbols = 'unicode'set encoding=utf8"vimcdoc"{ set helplang=cn"}"shift tab page"{ map
:tabp
map
:tabn
"}

 

转载于:https://www.cnblogs.com/jostree/p/4137402.html

你可能感兴趣的文章
金蝶正式宣布进军医疗市场
查看>>
[WCF权限控制]WCF自定义授权体系详解[实例篇]
查看>>
推荐一本迷你中文书《JavaScript Promise迷你书(中文版)》
查看>>
浅谈各种基于物联网的商业模式
查看>>
初识Docker,概念-架构-相关术语
查看>>
Go语言的9大优势和3大缺点
查看>>
java-基础-jdk命令行工具
查看>>
技术评析:云计算与摩尔定律相悖?
查看>>
云计算终端:智能还是傻瓜
查看>>
RabbitMQ之mandatory和immediate
查看>>
趋势杀毒曝远程执行漏洞 可盗取用户所有密码
查看>>
你造吗?这才是大数据项目成功的7大秘密
查看>>
Gartner:可颠覆IT产业的十大战略预测
查看>>
年会也能互联网+ 易信企业版玩投票抽奖
查看>>
调查 | 大多数企业漏洞根植在固件中
查看>>
大数据专家:大数据7大最奇特应用
查看>>
Commvault将未来押注在软件定义存储上
查看>>
《社交网站界面设计(原书第2版)》——3.11 发送邀请
查看>>
我与云计算大会的三天
查看>>
《PIC微控制器项目设计:C语言》一2.3 指针
查看>>