VIM-代码自动补全插件(YCM)

YouCompleteMe插件入门

    • 概述
    • 安装
      • Vundle安装
    • 文件拷贝
      • 配置文件
      • vim配置
    • 命令
      • 主命令
      • 子命令
        • 跳转命令
        • 设置快捷键
    • 参考

概述

本文主要介绍YCM插件的安装与使用。

安装

Vundle安装

  • 添加插件
    在文件.vimrc中添加Plugin 'ycm-core/YouCompleteMe
  • 运行安装命令
    打开vim工具,输入命令行:PluginInstall
    国内网速不好,可能下载时间会比较长。。。
  • 进入插件目录
$ cd ~/.vim/bundle/YouCompleteMe

由于插件依赖一些第三库,所以安装前先检查YCM是否安装了相关依赖库,输入命令如下

$ git submodule update --init --recursive
  • 安装
    输入安装命令
$ python3 install.py --all

文件拷贝

将插件目录下third_party/ycmd/examples文件夹中的配置文件模板文件.ycm_extra_conf.py拷贝到.vim文件夹下,具体操作如下:

$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim

配置文件

下述内容是插件模板文件中的内容

flags = [
'-Wall',
'-Wextra',
'-Werror',
'-fexceptions',
'-DNDEBUG',
# THIS IS IMPORTANT! Without a "-std=" flag, clang won't know which
# language to use when compiling headers. So it will guess. Badly. So C++
# headers will be compiled as C headers. You don't want that so ALWAYS specify
# a "-std=".
# For a C project, you would set this to something like 'c99' instead of
# 'c++11'.
'-std=c++11',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-isystem',
'/usr/include',
'-isystem',
'/usr/local/include',
'-isystem',
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1',
'-isystem',
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include',
]
  • -std:语言标准
    如果是C语言项目,需要将语言标准改为-std=c99,如果是C++项目则根据具体项目的语言标准,比如-std=c++11
  • -x:编程语言
    根据项目实际需求选择对应编程语言
C语言 C++语言 Objective-C语言 CUDA语言
c’ c++ objc cuda
  • -isystem:头文件目录
    ~~需要制定项目所需的标准库和第三方库的目录,常用目录如下:
  1. /usr/include:系统包含的头文件
  2. /usr/local/include:用户安装库相关头文件
  3. /usr/lib/c++/9:C++相关头文件,具体C++版本根据实际指定~~

vim配置

  • 配置文件
    .vimrc文件中添加如下配置,指定插件配置文件的路径。
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
  • python版本
    建议使用python3版本,可使用命令行查看目前安装的软件版本
python3 --version

.vimrc文件中指定python路径

 let g:ycm_server_python_interptreter='/usr/lib/python3.8'

通过上述配置,就可以使用TAB键正向选择匹配结果,持续按TAB键,直到循环结束。而shift + TAB可以实现反向循环。

命令

主命令

  • :YcmRestartServer:重启服务
    如果ycmd completion server 因不明原因中断,可以通过上述命令重启该服务。
  • :YcmDiags:诊断
    调用该命令,如果文件中存在错误和警告,将会覆盖VIMlocationlist文件并打开
  • :YcmDebugInfo:调试信息
    改命令将会打印出当前文件一系列的调试信息
  • :YcmCompleter:扩展命令
    通过该命令可以访问一些列的子命令,像跳转功能、类型信息等

子命令

跳转命令

使用该命令允许在代码间跳转,移动光标到相应变量,跳转命令就会将其添加到jumplist中,因此,可以使用CTRL+ O快捷键跳回先前的位置,或者使用CTRL + I快捷键前进到下一个位置。

  • GoToInclude
    查询当前行的头文件,并跳转到相应文件;
    支持文件类型包括:c, cpp, objc, objcpp, cuda
  • GoToDeclaration
    查询光标下的符号并跳转到其声明处;
    支持文件类型包括:c, cpp, objc, objcpp, cuda, cs, go, java, javascript, python, rust, typescript
  • GoToDefinition
    查询光标下的符号并跳转到其定义处;
    支持的文件类型包括:c, cpp, objc, objcpp, cuda, cs, go, java, javascript, python, rust, typescript

注:对于C族语言,该命令只在某些情况下有效,即符号定义在当前上下文内。一个上下文由所编辑的文件和文件内#include所直接或间接包含的文件组成。

  • GoTo
    该命令尝试采取智能的跳转方式,也就意味着,查找光标下的字符,如果可能跳转到它的定义;如果定义无法从当前上下文访问,则跳转到符号的声明。
    支持的文件类型包括:c, cpp, objc, objcpp, cuda, cs, go, java, javascript, python, rust, typescript
  • GoToReferences
    该命令尝试在整个项目内,查找光标下标识符参考,并列出相应的位置列表。
    支持文件类型包括:c, cpp, objc, objcpp, cuda, java, javascript, python, typescript, rust

设置快捷键

为了方便跳转,将上述跳转命令设置为如下快捷键,方便快速跳转。

  • nnoremap gi :YcmCompleter GoToInclude
  • nnoremap gc :YcmCompleter GoToDeclaration
  • nnoremap gf :YcmCompleter GoToDefinition
  • nnoremap gt :YcmCompleter GoTo
  • nnoremap gr :YcmCompleter GoToReferences
    上述配置采用vim的前缀键\去触发相关功能,比如,在Normal模式下输入\gt相当于调用了:YcmCompleter GoTo子命令。

参考

  • Github说明

你可能感兴趣的:(软件工具,#,VIM,YCM,YouCompleteMe,代码补全,vim)