您的位置:首页 > 其它

在 ubuntu 14.04 上安装 YouCompleteMe( 自己看的操作笔记, 路人请勿看, 避免浪费时间 )

2015-09-18 17:27 501 查看
本文所有操作来自下面两篇博客
http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html https://github.com/hh8456/use_vim_as_ide/blob/master/README.md#7.1.1
需要先安装 clang ( http://blog.csdn.net/firebird321/article/details/48528569 ) , python:

sudo apt-get install python-dev

1.
http://llvm.org/releases/download.html 处下载

Download LLVM 3.6.0

Pre-builtBinaries:

Clang for Ubuntu 14.04 (.sig)

解压到 ~/Downloads/clang+llvm 文件夹

2.

cd ~/.vim/bundle/

git clone https://github.com/Valloric/YouCompleteMe.git
cd YouCompleteMe/

# 获取 YCM 的依赖包

git submodule update --init --recursive

3.

编译 YCM 共享库:

cd ~/Downloads/

mkdir ycm_build

cd ycm_build

cmake -G "Unix Makefiles" . -DPATH_TO_LLVM_ROOT=~/Downloads/clang+llvm -DEXTERNAL_LIBCLANG_PATH=/home/huanghai/Downloads/clang+llvm/lib/libclang.so ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

make ycm_support_libs

4.

在工程目录下新建一个文件 .ycm_extra_conf.py, 内容如下

import os

import ycm_core

flags = [

'-std=c++11',

'-Werror',

'-Weverything',

'-Wno-deprecated-declarations',

'-Wno-disabled-macro-expansion',

'-Wno-float-equal',

'-Wno-c++98-compat',

'-Wno-c++98-compat-pedantic',

'-Wno-global-constructors',

'-Wno-exit-time-destructors',

'-Wno-missing-prototypes',

'-Wno-padded',

'-Wno-old-style-cast',

'-x',

'c++',

'-I',

'.',

'-I',

'/usr/include/',

'-I',

'/usr/include/c++/4.8/'

]

compilation_database_folder = ''

if compilation_database_folder:

database = ycm_core.CompilationDatabase( compilation_database_folder )

else:

database = None

SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]

def DirectoryOfThisScript():

return os.path.dirname( os.path.abspath( __file__ ) )

def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):

if not working_directory:

return list( flags )

new_flags = []

make_next_absolute = False

path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]

for flag in flags:

new_flag = flag

if make_next_absolute:

make_next_absolute = False

if not flag.startswith( '/' ):

new_flag = os.path.join( working_directory, flag )

for path_flag in path_flags:

if flag == path_flag:

make_next_absolute = True

break

if flag.startswith( path_flag ):

path = flag[ len( path_flag ): ]

new_flag = path_flag + os.path.join( working_directory, path )

break

if new_flag:

new_flags.append( new_flag )

return new_flags

def IsHeaderFile( filename ):

extension = os.path.splitext( filename )[ 1 ]

return extension in [ '.h', '.hxx', '.hpp', '.hh' ]

def GetCompilationInfoForFile( filename ):

if IsHeaderFile( filename ):

basename = os.path.splitext( filename )[ 0 ]

for extension in SOURCE_EXTENSIONS:

replacement_file = basename + extension

if os.path.exists( replacement_file ):

compilation_info = database.GetCompilationInfoForFile( replacement_file )

if compilation_info.compiler_flags_:

return compilation_info

return None

return database.GetCompilationInfoForFile( filename )

def FlagsForFile( filename, **kwargs ):

if database:

compilation_info = GetCompilationInfoForFile( filename )

if not compilation_info:

return None

final_flags = MakeRelativePathsInFlagsAbsolute(

compilation_info.compiler_flags_,

compilation_info.compiler_working_dir_ )

else:

relative_to = DirectoryOfThisScript()

final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )

return {

'flags': final_flags,

'do_cache': True

}

5.

在 .vimrc 中添加下面内容

" YCM 补全菜单配色

" 菜单

highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5

" 选中项

highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900

" 补全功能在注释中同样有效

let g:ycm_complete_in_comments=1

" 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示

let g:ycm_confirm_extra_conf=0

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

" 开启 YCM 标签补全引擎

"let g:ycm_collect_identifiers_from_tags_files=1

" 引入 C++ 标准库tags

" set tags+=/data/misc/software/misc./vim/stdcpp.tags

" YCM 集成 OmniCppComplete 补全引擎,设置其快捷键

inoremap <leader>; <C-x><C-o>

" 补全内容不以分割子窗口形式出现,只显示补全列表

set completeopt-=preview

" 从第2个键入字符就开始罗列匹配项

let g:ycm_min_num_of_chars_for_completion=2

" 禁止缓存匹配项,每次都重新生成匹配项

let g:ycm_cache_omnifunc=0

" 语法关键字补全

let g:ycm_seed_identifiers_with_syntax=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: