折腾了两天,终于好了

1。配置VIM

  (1)下载相关插件

sudo apt-get install git
sudo apt-get install build-essential cmake 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

   (2)安装支持python的VIM

  首先保证VIM已经卸载

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

  然后下载并配置编译,注意路径和自己的匹配

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./config-x86_64-linux-gnu \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3./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/vim81

  安装

cd ~/vim
sudo make install

  安装完后测试VIM是否支持python

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

     vim --version | grep python显示的python前面确实是加号。

2。安装VIM插件管理工具 pathogen

mkdir -p ~/.vim/autoload ~/.vim/bundle &&
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

  在.vimrc中添加

execute pathogen#infect()
syntax on
filetype plugin indent on

  这时~/.vim的目录结构如下

├── autoload
│ └── pathogen.vim
└── bundle

  autoload存放的pathogen.vim是一个插件(插件的就是一个脚本),.vim中 execute pathogen#infect() 会调用 pathogen.vim,

  pathogen.vim会调用 bundle中的插件。

  我们接下来需要做的就是把需要安装的插件放到 bundle目录下。

3. 下载并安装YCM

  (1)下载YCM到bundle目录下

git clone --recursive git://github.com/Valloric/YouCompleteMe ~/.vim/bundle

    如果执行该命令没报错, 就ok了. 但是中途有可能会断掉, 可以 cd 到 YouCompleteMe, 然后反复用如下命令再次进行下载:

git submodule update --init --recursive

    YCM大概有229M

    使用如下命令查看YCM大小

du -sh ~/.vim/bundle/YouCompleteMe

  (2)安装YCM

./install.py --clang-completer

  这个指令只适合64位系统,32位的需要自己下载clang并编译(很麻烦)。

4. 配置YCM

  .vimrc中输入

" YouCompleteMe
" Python Semantic Completion
let g:ycm_python_binary_path = '/usr/bin/python3'
" C family Completion Path
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
" 跳转快捷键
nnoremap <c-k> :YcmCompleter GoToDeclaration<CR>|
nnoremap <c-h> :YcmCompleter GoToDefinition<CR>|
nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>|
" 停止提示是否载入本地ycm_extra_conf文件
let g:ycm_confirm_extra_conf =
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax =
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files =
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=
" 在注释输入中也能补全
let g:ycm_complete_in_comments =
" 在字符串输入中也能补全
let g:ycm_complete_in_strings =
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings =
" 弹出列表时选择第1项的快捷键(默认为<TAB>和<Down>)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
" 弹出列表时选择前1项的快捷键(默认为<S-TAB>和<UP>)
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
" 主动补全, 默认为<C-Space>
"let g:ycm_key_invoke_completion = ['<C-Space>']
" 停止显示补全列表(防止列表影响视野), 可以按<C-Space>重新弹出
"let g:ycm_key_list_stop_completion = ['<C-y>']

  注意这句:

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

  这里需要创建 .ycm_extra_conf.py,并输入

flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
'-std=c99',
'-x',
'c',
'-I',
'/usr/include',
'-isystem',
'/usr/lib/gcc/x86_64-linux-gnu/5/include',
'-isystem',
'/usr/include/x86_64-linux-gnu',
'-isystem'
'/usr/include/c++/5',
'-isystem',
'/usr/include/c++/5/bits'
]
def FlagsForFile(filename):
return {'flags': flags}

  到此 YCM 可用。

如果出现报错

YouCompleteMe unavailable: unable to load Python.

安装

sudo apt install vim-gtk

  此外.ycm_extra_conf.py很重要,可以参考这个文档:https://github.com/Valloric/YouCompleteMe#option-2-provide-the-flags-manually

参考博客:

https://www.cnblogs.com/Harley-Quinn/p/6418070.html

https://blog.csdn.net/andre617/article/details/53496490#%E8%84%9A%E6%B3%A8

https://github.com/Valloric/YouCompleteMe/issues/2901

最新文章

  1. Bootstrap &lt;基础三十&gt;Well
  2. TopShelf框架创建Windows服务作为Remoting的宿主案例:
  3. -_-#Tiny Raytracer
  4. Android学习总结——Broadcast
  5. 阿里云ECS-Nginx阿里云客户端IP日志记录
  6. C# 将数据表导出到Excel通用方法
  7. freemarker定义一个连续的序列
  8. Linux环境下Flask部署至apache
  9. VC6配置CXimage库
  10. windows10多桌面创建 切换 和分屏
  11. SQL注入之Sqli-labs系列第二十关(基于头部的cookie POST报错注入)
  12. 20165313 《Java程序设计》第六周学习总结
  13. dp算法之平安果路径问题c++
  14. 一个简单的增强型PHP curl函数
  15. &#39;org.springframework.web.filter.CharacterEncodingFilter&#39; is not assignable to &#39;javax.servlet.Filter,This inspection lets you spot the following problems that might occur in descriptors that are used t
  16. mysql关联表插入-php环境中
  17. mysql锁机制之综述(一)
  18. django abstract base class ---- 抽象基类
  19. spring-boot 打包成 war包发布
  20. linux——(1)初识linux

热门文章

  1. hibernate课程 初探单表映射4-1 课程总结
  2. c#真正判断文件类型
  3. .net core 共享 .Net Forms Authentication cookie
  4. Eclipse + Tomcat 环境下配置 JSTL 标签
  5. 【Troubleshooting 】Outlook 客户端无法显示电子邮件图像
  6. SSL Labs: Increased Penalty When TLS 1.2 Is Not Supported
  7. vos套餐设置
  8. Python基础学习之文件(1)
  9. May 05th 2017 Week 18th Friday
  10. CRUD全栈式编程架构之界面层的设计