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

概述

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

安装

Vundle安装

  • 添加插件
    在文件.vimrc中添加Plugin 'ycm-core/YouCompleteMe
  • 运行安装命令
    打开vim工具,输入命令行:PluginInstall
    国内网速不好,可能下载时间会比较长。。。
  • 进入插件目录
$ cd ~/.vim/bundle/YouCompleteMe
  • install dependence
$ sudo apt install build-essential cmake vim python3-dev -y
  • install relate language
$ sudo apt install mono-complete golang nodejs npm -y

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

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

if you only want install C-family language, you can input as follow:

$ python3 install.py --clangd-completer

文件拷贝

将插件目录下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=<something>" 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=<something>".
# 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++objccuda
  • -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 <leader>gi :YcmCompleter GoToInclude<CR>
  • nnoremap <leader>gc :YcmCompleter GoToDeclaration<CR>
  • nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
  • nnoremap <leader>gt :YcmCompleter GoTo<CR>
  • nnoremap <leader>gr :YcmCompleter GoToReferences<CR>
    上述配置采用vim的前缀键\去触发相关功能,比如,在Normal模式下输入\gt相当于调用了:YcmCompleter GoTo子命令。

参考

<think>好的,用户想知道如何在Vim中配置代码自动补全插件。我之前整理过几个相关引用,需要先看看这些资料里有什么信息。 首先,引用[1]提到使用Vundle插件管理器安装插件,并提到了代码补全功能的实现步骤。用户可能需要先安装Vundle,这是配置插件的基础。然后引用[2]推荐了deoplete-jedi插件,特别适合Python开发,基于deoplete和Jedi。引用[3]提到了vim-mucomplete,这是一个链式补全插件。引用[4]则介绍了YouCompleteMeYCM)的配置,包括路径设置。 用户的需求是配置代码自动补全,但可能不清楚不同插件的区别和安装步骤。需要分步骤指导,先安装插件管理器,再选择插件。比如Vundle是常用的插件管理工具,安装后可以方便地添加其他插件。 接下来,可能需要列出几种不同的插件选项,让用户根据自己的需求选择。比如deoplete-jedi适合Python,YCM功能强大但配置复杂,vim-mucomplete则更轻量。需要说明每个插件的安装方法和配置要点,确保用户能一步步操作。 还要注意引用对应的来源,比如在介绍每个插件时标注引用编号。例如,提到Vundle时引用[1],deoplete-jedi引用[2],YCM引用[4]等。同时,用户可能需要安装依赖,比如Vundle的Git克隆,或者YCM需要编译等步骤。 另外,要检查是否有遗漏的步骤,比如.vimrc文件的配置,插件安装后的启用命令,以及可能的常见问题解决方法。比如YCM可能需要额外的编译步骤,而deoplete需要NeovimVim 8以上版本,并启用Python支持。 最后,生成相关问题,帮助用户进一步了解其他插件或解决可能遇到的问题,比如性能优化、不同语言的支持等。确保回答结构清晰,分步骤说明,并引用正确的资料。</think>### Vim代码自动补全插件配置教程 #### 一、插件管理器安装(以Vundle为例) 1. **下载Vundle** 在终端执行以下命令克隆Vundle仓库到Vim插件目录: ```bash git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim ``` 在`~/.vimrc`文件中添加初始化配置: ```vim set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'VundleVim/Vundle.vim' call vundle#end() filetype plugin indent on ``` 保存后执行`:PluginInstall`完成安装[^1]。 --- #### 二、自动补全插件选择与配置 1. **deoplete-jedi(Python开发推荐)** - 安装步骤: 在`.vimrc`中添加: ```vim Plugin 'Shougo/deoplete.nvim' Plugin 'deoplete-plugins/deoplete-jedi' ``` 保存后执行`:PluginInstall`。 - 启用配置: ```vim let g:deoplete#enable_at_startup = 1 ``` 需确保已安装Python支持(如`pip3 install pynvim`)[^2]。 2. **YouCompleteMe(多语言支持)** - 安装步骤: ```vim Plugin 'ycm-core/YouCompleteMe' ``` 保存后执行`:PluginInstall`,随后进入插件目录编译: ```bash cd ~/.vim/bundle/YouCompleteMe && python3 install.py --all ``` - 配置示例: ```vim let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py' ``` 支持C/C++/Python等语言[^4]。 3. **vim-mucomplete(轻量级链式补全)** - 安装步骤: ```vim Plugin 'lifepillar/vim-mucomplete' ``` 保存后执行`:PluginInstall`。 - 启用配置: ```vim set completeopt=menuone,noinsert,noselect let g:mucomplete#enable_auto_at_startup = 1 ``` 支持Tab键补全[^3]。 --- #### 三、验证与使用 1. 重启Vim,输入代码时按`Tab`或触发补全快捷键(如`Ctrl-N`)测试功能。 2. 若使用YouCompleteMe,需检查编译日志是否成功,并确认`.ycm_extra_conf.py`路径正确。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henry.zhu51

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值