Vim-YouCompleteMe插件国内安装

Vim插件YouCompleteMe国内安装

Update 2023/11/23: vim下现在我不用YCM了,换成Coc.nvim来进行代码补全。 不过在我看来其实没有特别明显的优势,所以YCM的配置注意事项还是留在这吧。

YCM 插件对 python, vim 的版本均有要求。

下载

可以使用 vim-plug 等工具下载, 也可以下载源码然后拷贝到.vim目录下

编译

编译用到 python3, 这里是问题最多的一步

# 编译并添加对C的提示支持
python3 install.py --clangd-completer --verbose

Searching Python 3.8 libraries...
...
Downloading Clangd from https://github.com/ycm-core/llvm/releases/download/13.0.0/clangd-13.0.0-x86_64-unknown-linux-gnu.tar.bz2...

使用--clangd-completer参数时, 脚本会去下载 clangd-14.0.0-x86_64-unknown-linux-gnu.tar.bz2 文件, 比较慢. 也可以提前根据提示的网站自己手动下载压缩包.

下载完成后, 放到本地目录下:

:~/.vim/plugged/YouCompleteMe/third_party/ycmd/third_party/clangd/cache$ ls
clangd-14.0.0-x86_64-unknown-linux-gnu.tar.bz2

还需对脚本YouCompleteMe/third_party/ycmd/build.py进行修改, 防止重新下载.

def DownloadClangd( printer ):
  ...
  MakeCleanDirectory( CLANGD_OUTPUT_DIR )

  if not p.exists( CLANGD_CACHE_DIR ):
    os.makedirs( CLANGD_CACHE_DIR )
    # 注释下面的语句
    #  elif p.exists( file_name ) and not CheckFileIntegrity( file_name, check_sum ):
    #  printer( 'Cached Clangd archive does not match checksum. Removing...' )
    #  os.remove( file_name )

  if p.exists( file_name ):
    printer( f'Using cached Clangd: { file_name }' )

配置

YCM 配合一个配置文件.ycm_c_c++_conf.py, YCM 搜索的位置在 vimrc 中指定:

Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
let g:ycm_global_ycm_extra_conf = "~/.ycm_c_c++_conf.py"

其内容的 example:

import os
import ycm_core

flags = [
  '-Wall',
  '-Wextra',
#  '-Werror',
  '-Wno-long-long',
#  '-Wno-variadic-macros',
  '-fexceptions',
  '-ferror-limit=10000',
  '-DNDEBUG',
  '-std=c99',
  '-xc',
  '-isystem/usr/include/',
  ]

SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', ]

def FlagsForFile( filename, **kwargs ):
  return {
  'flags': flags,
  'do_cache': True
  }

使用方式

🔻 对于C/C++来说, YCM的使用最好配合compilation database 来使用, 例如compiledb. 否则, 可能头文件的path识别出问题(stackoverflow).

2022年2月13日我使用的compilation database生成工具从compiledb换成了bear, 因为bear更好的支持递归, 即有make -C的情况.

需要的compilation database生成工具介绍: Compilation database — Sarcasm notebook


创建于: 2023-11-17T19:28:12, Lastmod: 2023-11-30T17:56:18