VIM-代码自动补全插件(YCM)
YouCompleteMe插件入门
- 概述
- 安装
- Vundle安装
- 文件拷贝
- 配置文件
- vim配置
- 命令
- 主命令
- 子命令
- 跳转命令
- 设置快捷键
- 参考
概述
本文主要介绍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++ | objc | cuda |
-isystem
:头文件目录
~~需要制定项目所需的标准库和第三方库的目录,常用目录如下:
/usr/include
:系统包含的头文件/usr/local/include
:用户安装库相关头文件/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
:诊断
调用该命令,如果文件中存在错误和警告,将会覆盖VIM的locationlist
文件并打开: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
子命令。
参考
- Github说明
VIM-代码自动补全插件(YCM)相关推荐
- vim 自动补全插件YCM 安装 配置
vim 自动补全插件YCM 安装 配置 报错 NoExtraConfDetected: No .ycm_extra_conf.py file detected, so no compile flags ...
- VSCode代码自动补全 - 插件篇
VScode 不能自动补全结束标签?自动修改匹配的结束标签? 这里介绍一款vscode插件,只需要输入标签的单词或字母,按enter键,就能直接自动生成开/闭标签,且光标居中. 还有就是快捷方法的使用 ...
- vim代码自动补全函数提示设置
vim中不能代码补全让人感觉很不爽,以下配置就是进行代码补全的,虽然功能没有windows下IDE功能强大,但是也足够用了. 需要插件为:neocomplcache,OmniCppComplete,A ...
- vim python补全_转:VIM python 自动补全插件:pydiction
这是一个相当不错的 Python 代码自动完成的脚本. 可以实现下面python代码的自动补全: 简单python关键词补全 python 函数补全带括号 python 模块补全 python 模块内 ...
- Bolt XML和JQBolt Lua代码自动补全插件配置教程
Bolt没有提供官方IDE,缺少强大的代码提示和自动补全,Notepad++写起界面和脚本来比较费劲. Notepad++有个QuickText插件,支持多语言的自动补全,进行简单的配置就可以支持Bo ...
- VScode Vue项目使用html代码自动补全插件
1.下载插件: HTML Snippets 2.配置settings.json文件 打开文件方式:在VScode中同时按住Ctrl+Shift+P,搜索配置文件 3.在settings.json中添加 ...
- vscode自动填充地址插件_制作VSCODE代码自动补全插件
首先写在前面,我是看了VSCode插件制作:HTML代码自动填充这篇文章后,才基本了解这类vscode插件的编写和配置方法的,所以在文章开头特地声明一下. 首先在本地测试一下补全的信息 第一步,你需要 ...
- Blender:下载并安装文本编辑器(Text Editor)代码自动补全插件
参考网站: [Addon] Auto Completion in Blenders Text Editor Code Autocomplete Manual#Installation [Youtube ...
- Pydiction : VIM上的PYTHON代码自动补全插件
http://www.vim.org/scripts/script.php?script_id=850 1.下载Pydiction 其中有4个文件: complete-dict //PYTHON 的K ...
最新文章
- 一款零注解侵入的 API 文档生成工具,你用过吗?
- Linux入门和运维
- Android内容提供程序
- swift如何动态创建对象
- python实现微信自动发信息_Python实现智慧-定期向微信女友发送消息,python,智给,定时,发消息...
- 当当网头部和尾部——CSS源码
- ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)
- 如何快速学会java编程?
- matlab重叠图像块拼接,在matlab中拼接图像时如何正确混合?
- UML的类图中各箭头的含义
- GA遗传算法介绍与实例
- python全套视频迅雷下载_[全套视频] 老王Python基础,进阶,项目篇(无KEY完整版) 视频教程 15G...
- 极光推送java添加用户_极光推送 java集成
- 300以内的蓝牙耳机哪款好?半入耳蓝牙耳机南卡和漫步者测评
- 《裁梦为魂》 - 银临 :OI版
- WebRTC RTCP XR
- 几个p2p开源项目[转] - 文渊阁 - 博客大巴
- 燕国胜国际会议英文介绍翻译
- sql显示服务器连接不上,sql服务器连接不上
- 欢迎同学们参加新乡学院2019年3D打印暑期夏令营
热门文章
- 蓝牙耳机哪个音质效果好?音质最好的蓝牙耳机
- 魅族16支持html吗,魅族16X手机配置正式公布:骁龙710,支持屏幕指纹
- Linux系统中的虚拟化安装部署
- win11修改状态栏成透明状态(注册表修改,无需下载软件)
- XENIRO 讯琥科技应用案例(六)| 边缘计算和区块链推动智慧农业升级
- C# 常用控件及单击事件
- Mac中vim的 进入编辑状态、退出编辑状态、强制保存并退出
- 二本学渣考研失败,海量算法高频面试题精编解析,这原因我服了
- 『飞桨领航团』带你参加国际头部赛事signate柠檬图像分类,7日学会图像分类!...
- vue项目设置浏览器icon图标