在 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
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
相关文章推荐
- linux tail -f catalina.out查看控制台失败
- MyBatis 通过包含的jdbcType类型
- unity的forward rendering 中光源的使用和light的render mode
- Firefox OS启动过程分析-nuwa创建新进程
- vlfeat--caltech101.m个人注释
- 数组、链表、Hash(转)
- localToGlobal和globalToLocal
- WIndows 2008 安装Microsoft .NET Framework v4.0 失败,错误HRESULT 0xc8000222解决办法
- 说说使用nose、noes2、pytest感受
- 【笔记】PHP面向对象编程——面向对象的基本概念(DAY 1)
- JAVA深入研究——Method的Invoke方法(转)
- UM适配iOS9
- 伊斯坦布尔之旅第四天:大巴扎和博斯普鲁斯海峡
- 函数调用约定与名字修饰约定
- Beads题解
- android中设置默认语言、默认时区
- pbzip2 安装与使用
- 【烙铁使用规范】—— 烙铁头使用及保养
- Git 中一些问题 : refusing to update checked out branch
- Spring AOP 通知