html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
YCM推荐选项
由于C++语言的复杂性,根据语义对C++进行代码补全并非易事。最近浏览YouCompleteMe项目,发现它已经开始向用户推荐使用clangd作为C++ Completer。与libclang相比,YCM列举了不少clangd的优势(如下图所示)。简单讲,clangd的好处有:全项目索引、代码跳转、变量重命名、更快的代码补全、提示信息、格式化代码等。
YCM的建议也呼应了2018年XCode团队将目光从libclang转向clangd的动作。尽管YCM的install.py脚本依旧将clang completer列为测试功能。但看过clangd的优点,让人不禁期待尝试一番。
谈到clangd,就不得不提及LSP(Language Server Protocol)。为了减少插件作者在不同编辑器上的重复工作,LSP协议定义了补全器前端和补全器后端的接口。这就使得插件作者只需要针对某款编辑器开发LSP前端插件,保证其能够跟类似clangd的补全器后端进程通信接口。一般情况下,当编辑器打开后,补全器后端进程便会被创建。当编辑器关闭后,补全器后端进程也会随着终止。clangd就是LLVM团队开发的C系语言补全器,可以为C、C++、Objective-C等语言提供代码补全、跳转等服务。
作为知名C++ completer,可以与clangd配合工作的编辑器插件不在少数。在Vim编辑器上就有YCM、vim-lsp等插件,在VSCode上也有LLVM团队提供的clangd同名插件。下面,我将介绍在VSCode上使用clangd完成C++代码补全的过程。
安装clangd
由于clangd的工作原理与代码编译过程联系紧密,所以我建议大家在可以对项目进行编译的环境安装clangd程序。根据LLVM的官方说明,大部分Linux开发版都提供了clangd二进制包。在Ubuntu 19.10和Ubuntu 20.04上,只需要执行如下指令便可以安装clangd。
sudo apt install clangd
在安装好clangd后,还需要安装与clangd交互的LSP前端。我这里选择以VSCode Remote-SSH方式安装clangd插件。
远程安装成功后,我们可以在~/.vscode-server/extensions/
目录下看到插件llvm-vs-code-extensions
。
配置Compilation Database
接下来,就需要为目标项目配置Compilation Database
。由于clangd依赖编译器前端提供索引和AST信息,这也注定了clangd在提供高准确跳转/补全的同时,也要用户配置好项目的“编译说明”,这个“编译说明”便被称为Compilation Database。
在clangd看来,Compilation Database是一个名为compile_commands.json
的JSON文件,它会记录每个.c/.cpp
文件的编译依赖和编译选项(如图4所示)。如果一个项目源码文件较多,可以借助bear
等工具在项目编译过程中记录相关编译选项。
# 为使用GNU make的项目创建Compilation Database
sudo apt install bear
bear make
在Compilation Database创建成功后,便可以通过VSCode Remote-SSH打开某C/C++项目代码。启动后端clangd进程会主动寻找项目根目录下的compile_commands.json文件,并根据文件中记录的编译信息,在项目根目录下的.clangd文件夹中生成相关索引文件。下面是clangd前后端配合,为用户提供的类似Visual Studio IntelliSense功能。
资源消耗
目前看来,在配置好Compilation Database后,clangd的各项功能运转正常、反应灵敏,其能够实现跨Translation Unit(TU)的补全/跳转。但其资源占用也同样可观。对于一个32MB源码量的C语言项目,compile_commands.json
文件达到了526KB(当然这个跟项目中源代码文件数有关),而后台clangd进程则占用了127MB物理内存。
综合来看,通过clangd实现C++代码补全的方案还是值得尝试的。与VSCode提供的C/C++ Extension相比,clangd的优势应该是在开源可控,满足大家DIY的需求。
html没有代码补全 vscode_借助clangd实现VSCode C++代码补全相关推荐
- c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
在VSCode C/C++ IntelliSense领域,目前有两位实力相当的选手,它们分别是基于微软闭源技术的C/C++ Extension和开源方案clangd.根据我目前体验,它俩的特性可以总结 ...
- Windows11 WSL2 ubuntu中vscode调试代码
Windows11 WSL2 ubuntu中vscode调试代码 Windows11 WSL2 ubuntu开发环境使用分享 第一章 Windows11 WSL2 安装ubuntu18.04并运行RO ...
- 代码补全_AI加持,Kite增加智能代码补全功能:减少一半操作,实时补全
代码补全工具 Kite 近日更新了最新的版本,增加了名为「Intelligent Snippets」的新功能.这一功能可以帮助开发者更为智能和高效的补全 Python 代码中的函数命令了. 机器之心报 ...
- html插入flash代码_初学者必备Web开发APP,支持代码补全,一键插入代码,厉害了!...
新手学前端神器,HTML代码补全功能太牛了! 讲过学习后端的许多优秀APP,这次来推荐一下前端用的软件. 前端,包含了HTML+CSS+JavaScript这一整套的流程,缺一不可. 其实,市面上用来 ...
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?
eclipse代码自动提示设置.如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)? 参考文章: (1)eclipse代码自动提示设置.如何配置eclipse的代码自动提示功能( ...
- 吴恩达斯坦福CS230第一名:图像超级补全,效果惊艳(附代码)
[新智元导读]图像修复(Image inpainting)是一个已经被广泛研究的计算机视觉问题,即恢复图像中缺失的部分.斯坦福大学CS230课程的Mark Sabini等人提出"Image ...
- idea自动补全代码,一秒生成new List,写代码更便捷,快捷方法!
自动补全List<lo> xx = new Arraylist<>(); 点击设置 点击编译器选中后缀补全,点击+号 选中java 上面的list是快捷方式 下面需要补全的就是 ...
- 【vscode基于clangd实现Android/Linux代码跳转】
背景: 在开发大型工程例如Android或Linux时若我们使用vscode搭配官方的C/C++插件使用发现,经常很多代码都无法跳转,代码补全功能几乎是废的,通过网友以及同事身边了解之后发现vscod ...
- vscode css智能补全_强大的 VS Code入门
简介 在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 系统外,最大的惊喜莫过于宣布推出免费跨平台的 Visual Studio Co ...
最新文章
- 32位linux运行64位jdk,linux64位操作系统装32位jdk解决方法
- Chrome浏览器扩展程序的本地备份
- 什么变量在堆内存里存放,什么变量在栈内存里存放
- 淘宝一淘网收录部分垂直B2C网站信息
- 人工智能秘史(四):憧憬人机共生的“DARPA梦想家”
- 编程语言对比 导入模块
- netbeans php 断点调试,windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php
- Lcs客户端配置和测试
- 支付宝mysql集群_支付宝支撑2135亿成交额的数据库架构原理
- 4. HTTP Status Code
- Iphone 5s 8.0.2越狱
- 蓝桥杯 杨辉三角形 python组省赛真题
- linux sed替换行,shell - 使用Sed替换包含字符串的整行
- 海康web插件视频播放异常
- html手机端富文本,移动端富文本踩坑
- 醉袖迎风受落花——好代码的10条认知
- 【入门】Markdown的高级应用、计算机硬件、linux基本命令
- 使用Apriori算法寻找频繁样式(Frequent Patterns)
- 用Python解决一个简单的数论问题——x分解为a^2+b^2
- 安全生产施工单位材料准备清单