折腾了两天,终于好了
1。配置VIM
(1)下载相关插件
sudo apt-get install git sudo apt-get install build-essential cmakesudo
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.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/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 = 0 " 语法关键字补全 let g:ycm_seed_identifiers_with_syntax = 1 " 开启 YCM 基于标签引擎 let g:ycm_collect_identifiers_from_tags_files = 1 " 从第2个键入字符就开始罗列匹配项 let g:ycm_min_num_of_chars_for_completion=2 " 在注释输入中也能补全 let g:ycm_complete_in_comments = 1 " 在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 " 注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 弹出列表时选择第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 可用。
此外.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