• Ubuntu 16.04 64位安装YouCompleteMe


    之前记录在OneNote上感觉有点乱,而且不适合保存shell,这次重新安装又出问题了,干脆写篇博客记录。

    从零开始

    1、git(用来下载vim和相关插件)

    sudo apt-get install git
    

    2、cmake(用来编译clang-llvm)

    sudo apt-get install build-essential cmake

    3、vim,这里手动编译vim,因为需要python支持,直接apt-get的话会遇到很多麻烦

    过程参考https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source

    先安装依赖项,注意,Ubuntu 16.04是liblua5.1-dev而不是lua5.1-dev

    sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev 
        libgtk2.0-dev libatk1.0-dev libbonoboui2-dev 
        libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev 
        python3-dev ruby-dev lua5.1 liblua5.1-dev libperl-dev git
    

    如果已经有vim的话需要移除它

    sudo apt-get remove vim vim-runtime gvim
    sudo apt-get remove vim-tiny vim-common vim-gui-common vim-nox
    

    然后就是Ubuntu的特别之处,如果要使用python,配置目录可能会有和机器相关的名字,我的是

    所以我的配置参数如下:

    cd ~
    git clone https://github.com/vim/vim.git
    cd vim
    ./configure --with-features=huge 
                --enable-multibyte 
                --enable-rubyinterp=yes 
                --enable-pythoninterp=yes 
                --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu 
                --enable-python3interp=yes 
                --with-python3-config-dir=/usr/lib/python3.5/config-3.5m-x86_64_linux-gnu 
                --enable-perlinterp=yes 
                --enable-luainterp=yes 
                --enable-gui=gtk2 --enable-cscope --prefix=/usr
    make VIMRUNTIMEDIR=/usr/share/vim/vim80
    

    然后直接安装了

    cd ~/vim
    sudo make install
    

    相反的,卸载需要保留vim文件夹并且安装checkinstall

    sudo apt-get install checkinstall
    cd ~/vim
    sudo checkinstall
    

    安装成功后,打开vim,命令模式下输入:echo has("python") || has("python3"),结果是1就代表成功了。

    之前一次由于没有针对Ubuntu 16.04更改配置,导致vim支持没有安装,虽然vim --version | grep python显示的python前面确实是加号。

     4、Vundle (用来管理vim插件)

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

    至于.vimrc的内容见原地址 https://github.com/VundleVim/Vundle.vim

    在.vimrc的Vundle begin()和end()之间加上 Plugin 'Valloric/YouCompleteMe',然后vim命令:PluginInstall

    由于YouCompleteMe有223M左右,所以需要耐心等待,可以时不时用命令du -s ~/.vim/bundle/YouCompleteMe观察文件夹大小。

    5、直接安装YCM

    ./install.py --clang-completer
    

    它会自动下载clang 3.9.0,也可以手动到http://releases.llvm.org/download.html 下载预编译的二进制文件,爱折腾的可以直接下源码,然后cmake编译。

    YCM安装完成,现在在.vimrc中加入以下内容(此处直接参照博客 http://www.mikewootc.com/wiki/tool/sw_develop/vim_ycm_ubuntu_1604.html)

    " YouCompleteMe
    set runtimepath+=~/.vim/bundle/YouCompleteMe
    let g:ycm_collect_identifiers_from_tags_files = 1           " 开启 YCM 基于标签引擎
    let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全
    let g:syntastic_ignore_files=[".*.py$"]
    let g:ycm_seed_identifiers_with_syntax = 1                  " 语法关键字补全
    let g:ycm_complete_in_comments = 1
    let g:ycm_confirm_extra_conf = 0
    let g:ycm_key_list_select_completion = ['<c-n>', '<Down>']  " 映射按键, 没有这个会拦截掉tab, 导致其他插件的tab不能用.
    let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']
    let g:ycm_complete_in_comments = 1                          " 在注释输入中也能补全
    let g:ycm_complete_in_strings = 1                           " 在字符串输入中也能补全
    let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全
    let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
    let g:ycm_show_diagnostics_ui = 0                           " 禁用语法检查
    inoremap <expr> <CR> pumvisible() ? "<C-y>" : "<CR>" |            " 回车即选中当前项
    nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>|     " 跳转到定义处
    "let g:ycm_min_num_of_chars_for_completion=2                 " 从第2个键入字符就开始罗列匹配项
    

    关键是配置文件.ycm_extra_conf.py,包含了补全的系统头文件和源文件出处。

    在这里添加需要包含的目录,只需要修改flags

    到这里基本YCM就配置好了,Ctrl+Space弹出补全对象,Ctrl+J跳转至定义处,这里暂时只添加了标准库,因为有些函数是一层层的调用,如果要看底层实现,可以学习下ctags的使用,毕竟YCM最大的优点是补全的同时还能非常流畅地编辑,包含太多可能导致补全变慢。

    而且.ycm_extra_conf.py可以在当前目录配置,YCM是先在当前目录查找再网上走一直递归到找到为止,并且只会加载一次。

    更多内容参考原地址 https://github.com/snakeleon/YouCompleteMe-x86

  • 相关阅读:
    5、依赖倒转原则
    4、开放-封闭原则
    3、单一职责原则
    2013年工作生活总结
    2、策略模式
    1、简单工厂模式
    Unity3D笔记四 基础知识概念
    PythonStudy——PyCharm使用技巧 Column Selection Mode(列选择模式)
    PythonStudy——函数对象的案例
    PythonStudy——函数嵌套定义 Function nesting definition
  • 原文地址:https://www.cnblogs.com/Harley-Quinn/p/6418070.html
Copyright © 2020-2023  润新知