vim插件YouCompleteMe插件安装:
在ubuntu 18.04默认的vim版本是8.0,PluginInstall之后报不支持当前vim版本,所以在github上下载vim8.2的源码进行升级安装。
提示:一定要有耐心,此方法已经验证过几次,没有问题,大部分踩的坑都已经记录,good luck.
0x01:从github上下载或者clone vim源代码
a.网站下载zip
https://github.com/vim/vim
unzip vim-master
cd vim-master
b.linux 中直接clone代码
cd ~/Desktop
https://github.com/vim/vim.git
cd vim
0x02:Linux vim安装vundle:
1.从git上clone代码到本地 ~/.vim/bundle 文件夹下
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
curits@curits-virtual-machine:~/.vim/bundle$ pwd
/home/curits/.vim/bundle
2.只需要在 ~/.vimrc中添加"Plugin xxx",在vim 中输入:PluginInstall 就会从网络上下载插件并安装。
使用示例:
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'Valloric/YouCompleteMe "用以下载YCM文件
call vundle#end()
下载完成之后可以在以下文件夹看到下载好的插件:
curits@curits-virtual-machine:~/.vim/bundle$ pwd
/home/curits/.vim/bundle
curits@curits-virtual-machine:~/.vim/bundle$ ls
auto-pairs gdbmgr indentLine nerdtree syntastic undotree vim-airline-themes vim-gutentags vim-startify YouCompleteMe
ctrlp.vim grep nerdcommenter nerdtree-git-plugin tagbar vim-airline vim-bufferline vim-nerdtree-tabs Vundle.vim
可以看到YCM源码已经下载好了,也可以选择从github上clone源代码,然后将文件拷贝到bundle文件夹下!!!!
0x03:编译VIM源码
基本步骤:
//先移除老版本的vim
sudo apt-get remove vim vim-runtime vim-tiny vim-common vim-scripts vim-doc
sudo ./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-python3interp=yes \
--with-python3-config-dir=$(python3-config --configdir) \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr/local
sudo make
sudo make install
//安装完一定记得重启以下终端!!!!!
检查vim基本属性是否正常:
curits@curits-virtual-machine:~/.vim/bundle$ vim --version
//vim 版本已经升级至8.2
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 6 2021 14:35:42)
Included patches: 1-2301
Compiled by curits@curits-virtual-machine
Huge version without GUI. Features included (+) or not (-):
curits@curits-virtual-machine:~$ vim --version | grep python
+comments +libcall -python +visual
+conceal +linebreak +python3 +visualextra
Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lm -ltinfo -ldl -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -lpython3.6m -lpthread -ldl -lutil -lm
0x03:YCM安装
//先安装依赖包
sudo apt install build-essential cmake python3-dev
cd ~/.vim/bundle/YouCompleteMe
//下面这个命令更新子模块需要花很长时间耐心等待,一定要等clone完自己退出!!!
sudo git submodule update --init --recursive
//--clangd-completer 表示对C/C++的支持,如果要支持更多后跟参数 --all
sudo python3 install.py --clangd-completer
//配置文件拷贝
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim
0x04:报错以及解决
报错1:YouCompleteMe unavailable: requires Vim compiled with Python (3.6.0+) support.
报错原因:在编译Vim ./configure时没有加参数
解决办法:见前文Vim源码编译命令
报错2:YCM has dropped support for python2. You need to recompile it with python3 instead.
报错原因:当前系统默认的python版本为2.x,可以输入命令python检查当前默认内置python版本;
解决办法:设置本机Python的优先级
//此时,我们只需要执行下面两条命令,改一下python 的优先级即可~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
//验证方法
curtis@curtis-virtual-machine:/mnt/hgfs/share/write_code/query_runqueues$ python
Python 3.6.9 (default, Oct 8 2020, 12:12:24)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
报错3:在启动vim时YCM服务器没有开起来
The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). Unexpect...ype ':YcmToggleLogs ycmd_46753_stderr_v24jwju3.log' to check the logs.
//解决办法
//python3 install.py --clangd-completer
报错4:也就是少一些库,看报错具体信息sudo apt-get install xxx
checking --with-tlib argument... empty: automatic terminal library selection
checking for tgetent in -ltinfo... no
checking for tgetent in -lncurses... no
checking for tgetent in -ltermlib... no
checking for tgetent in -ltermcap... no
checking for tgetent in -lcurses... no
no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
//以上报错解决办法
sudo apt-get install libncurses5-dev
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:232 (message):
Your C++ compiler does NOT fully support C++17.
-- Configuring incomplete, errors occurred!
See also "/tmp/ycm_build_vd6sm42s/CMakeFiles/CMakeOutput.log".
ERROR: the build failed.
//以上报错解决办法,这个可能会导致gcc -m32 xxx.c编译报错,install 完把优先级设回去就好
sudo apt-get install g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8
Traceback (most recent call last):
File "/home/curits/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py", line 1138, in BuildWatchdogModule
import setuptools # noqa
ModuleNotFoundError: No module named 'setuptools'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/curits/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py", line 1195, in <module>
Main()
File "/home/curits/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py", line 1177, in Main
DoCmakeBuilds( args )
File "/home/curits/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py", line 1170, in DoCmakeBuilds
BuildWatchdogModule( args )
File "/home/curits/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py", line 1155, in BuildWatchdogModule
p.join( lib_dir, 'watchdog' ) )
File "/usr/lib/python3.6/shutil.py", line 315, in copytree
names = os.listdir(src)
FileNotFoundError: [Errno 2] No such file or directory: 'src/watchdog'
//以上报错解决办法
sudo git submodule update --init --recursive
Unable to start the ycmd server. Path in 'g:ycm_server_python_interpreter' option does not point to python3+;
//原因,可能没有通过sudo apt-get install python去安装Python,导致YCM无法使用python,你可以尝试输入python看是否可以正常启动python而非python3!
//解决办法
sudo apt-get install python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
0x04:配置Vimrc
vim ~/.vimrc
//添加如下代码
:YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
let g:ycm_collect_identifiers_from_tags_files = 1
set completeopt=menu,menuone
let g:ycm_add_preview_to_completeopt = 0 " 关闭函数原型提示
let g:ycm_show_diagnostics_ui = 0 " 关闭诊断信息
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2 " 两个字符触发 补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 收集
let g:ycm_complete_in_strings=1
noremap <c-z> <NOP>
let g:ycm_key_invoke_completion = '<c-z>' " YCM 里触发语义补全有一个快捷键
let g:ycm_max_num_candidates = 15 " 候选数量
let g:ycm_semantic_triggers = {
\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
\ 'cs,lua,javascript': ['re!\w{2}'],
\ }
效果展示,代码可以自动补全: