zoukankan      html  css  js  c++  java
  • 【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

    原文网址:http://www.cnblogs.com/jostree/p/4137402.html

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html

    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以上的库

    可以再此处下载:http://llvm.org/releases/download.html

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

    3.安装vundle插件

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

    并配置.vimrc

    复制代码
    set nocompatible "与vi不一致
    filetype off
    set 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'
    "indent
    Bundle 'php.vim-html-enhanced'
    "color
    Bundle '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.git
    sudo git submodule update --init --recursive

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

    5.编译YouCompleteMe插件

    首先需要安装CMAKE

    sudo apt-get install cmake

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

    cd ~
    mkdir ycm_build
    cd 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的路径。

    然后make编译

    make ycm_support_libs

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

    最后回到YouCompleteMe目录下:

    执行

    cd ~/.vim/bundle/YouCompleteMe
    ./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 iMproved
    filetype off                   " required!
     
    set rtp+=~/.vim/bundle/vundle/
    call vundle#rc()
     
    " let Vundle manage Vundle
    " required! 
    Bundle 'gmarik/vundle'
     
    " My Bundles here:
    "
    " original repos on github
    
    Bundle 'tpope/vim-fugitive'
    Bundle 'Lokaltog/vim-easymotion'
    Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
    Bundle 'tpope/vim-rails.git'
    " vim-scripts repos
    Bundle 'L9'
    Bundle 'FuzzyFinder'
    " non github repos
    Bundle 'git://git.wincent.com/command-t.git'
    " My plugin
    Bundle '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 showmatch
    set matchtime=1
    set autowrite
    set ruler                   " 打开状态栏标尺
    set cursorline              " 突出显示当前行
    nnoremap <F2> :g/^s*$/d<CR>  
    set laststatus=1     "启动显示状态行(1),总是显示状态行(2)  
    set foldenable      " 允许折叠  
    "set foldmethod=indent   " 手动折叠  
    set nu
    set fileencodings=utf-8,ucd-bom,gb18030,gbk,gb2312,cp936
    set tabstop=4
    set sts=4
    set expandtab 
    set softtabstop=4
    set shiftwidth=4
    set autoindent
    set cindent
    set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
    colorscheme desert
    set nobackup
    set textwidth=100
    map <F5> :! /usr/bin/python %
    map <F6> :call CompileRunGpp()<CR>
    
    
    """"""""""syntastic""""""""""""
    let g:syntastic_check_on_open = 1
    let g:syntastic_cpp_include_dirs = ['/usr/include/']
    let g:syntastic_cpp_remove_include_errors = 1
    let g:syntastic_cpp_check_header = 1
    let g:syntastic_cpp_compiler = 'clang++'
    let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'
    "set error or warning signs
    let g:syntastic_error_symbol = "✗"
    let g:syntastic_warning_symbol = "⚠" 
    "whether to show balloons
    let g:syntastic_enable_balloons = 1
    let g:syntastic_always_populate_loc_list = 1
    
    nnoremap <silent> <C-d> :lclose<CR>:bdelete<CR>
    cabbrev <silent> 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 = 1
    let g:ycm_seed_identifiers_with_syntax = 1
    let g:ycm_confirm_extra_conf = 0
    let g:ycm_always_populate_location_list = 1
    let g:ycm_min_num_of_chars_for_completion = 2
    let g:ycm_complete_in_comments = 1
    
    nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
    nnoremap <leader>lo :lopen<CR>
    
    
    "minibufexpl
    "{
    let g:miniBufExplMapCTabSwitchBufs = 1
    let g:miniBufExplMapWindowNavVim = 1
    "}
    "
    "pydiction
    "{
    "filetype plugin on
    "let g:pydiction_location='~/.vim/bundle/Pydiction/complete-dict'
    "}
    "" OmniCppComplete
    "" {
    " "-- omnicppcomplete setting --
    "    " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
    "    imap <F3> <C-X><C-O>
    "    " 按下F2根据头文件内关键字补全
    "    imap <F2> <C-X><C-I>
       " 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=1
    let 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=syntaxcomplete
    autocmd FileType python 
    set omnifunc=pythoncomplete
    "autocmd FileType python runtime! autoload/pythoncomplete.vim
    "}
    "
    "tagbar
    "{
    "nmap <Leader>tb :TagbarToggle<CR>
    map <F8> :TagbarToggle<CR>
    imap <F8> <ESC>:NERDTreeToggle<CR>
    let g:tagbar_ctags_bin='/usr/bin/ctags'
    let g:tagbar_width=30
    autocmd 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 <Leader>tl :TlistToggle<CR>  
    "设定F8为taglist开关
    "}
    
    "Nerd-tree
    "{
    map <F7> :NERDTreeToggle<CR>
    imap <F7> <ESC>:NERDTreeToggle<CR>
    "}
    
    "WinManager
    "{
    let g:winManagerWindowLayout='FileExplorer|BufExplorer'  " 这里可以设置 为多个窗口,  如'FileExplorer|BufExplorer|TagList'
    let g:persistentBehaviour=0             " 只剩一个窗口时,  退出vim.
    let g:winManagerWidth=20
    let g:defaultExplorer=1
    nmap <leader>fir :FirstExplorerWindow<cr>
    nmap <leader>bot :BottomExplorerWindow<cr>
    nmap <leader>wm :WMToggle<cr>
    "}
    "
    runtime! ftplugin/man.vim
    
    set hlsearch
    set autoindent                  " copy indent from current line
    set autoread                    " read open files again when changed outside Vim
    set autowrite                   " write a modified buffer on each :next , ...
    set backspace=indent,eol,start  " backspacing over everything in insert mode
    "set backup                      " keep a backup file
    set browsedir=current           " which directory to use for the file browser
    set complete+=k                 " scan the files given with the 'dictionary' option
    set history=50                  " keep 50 lines of command line history
    set hlsearch                    " highlightthe last used search pattern
    set incsearch                   " do incremental searching
    set listchars=tab:>.,eol:$     " strings to use in 'list' mode
    set mouse=a                     " enable the use of the mouse
    set wrap                      "   wrap lines
    set popt=left:8pc,right:3pc     " print options
    set ruler                       " show the cursor position all the time
    "set shiftwidth=2                " number of spaces to use for each step of indent
    set showcmd                     " display incomplete commands
    set smartindent                 " smart autoindenting when starting a new line
    "set tabstop=2                   " number of spaces that a <Tab> counts for
    set visualbell                  " visual bell instead of beeping
    set wildignore=*.bak,*.o,*.e,*~ " wildmenu: ignore these extensions
    set wildmenu                    " command-line completion in an enhanced mode
    set formatoptions=tcrqn
    "
    "-------------------------------------------------------------------------------
    "  highlight paired brackets
    "-------------------------------------------------------------------------------
    highlight MatchParen ctermbg=blue guibg=lightyellow
    
    inoremap  ,  ,<Space>
    "
    "-------------------------------------------------------------------------------
    " autocomplete parenthesis, (brackets) and braces
    "-------------------------------------------------------------------------------
    inoremap  (  ()<Left>
    inoremap  [  []<Left>
    inoremap  {  {}<Left>
    "
    vnoremap  (  s()<Esc>P<Right>%
    vnoremap  [  s[]<Esc>P<Right>%
    vnoremap  {  s{}<Esc>P<Right>%
    "
    " surround content with additional spaces
    "
    vnoremap  )  s(  )<Esc><Left>P<Right><Right>%
    vnoremap  ]  s[  ]<Esc><Left>P<Right><Right>%
    vnoremap  }  s{  }<Esc><Left>P<Right><Right>%
    set vb t_vb="
    " vim-powerline
    set laststatus=2
    set t_Co=256
    let g:Powerline_symbols = 'unicode'
    set encoding=utf8
    
    "vimcdoc
    "{
    set helplang=cn
    "}
    
    "shift tab page
    "{
     map <S-Left> :tabp<CR>
     map <S-Right> :tabn<CR>
    "}
    复制代码
  • 相关阅读:
    【蛙蛙推荐】GridView和ObjectDataSource更新数据的一个Bug
    忙的顾不上写博客了
    重新启动开源的CRM项目,招募开源精英
    设计一个简单的缓存服务类
    hive的multidistinct可能带来性能恶化
    Linux tail 命令详解
    MapReduce:默认Counter的含义
    hive join
    Linux Top 命令解析 比较详细
    Hive优化总结(转)
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4202984.html
Copyright © 2011-2022 走看看