官网下载到 VSCode 。
VScode可以在windows下加载samba服务的linux 目录作为工作文件夹(远程映射为Z盘)。好像是有linux版本的。因为是基于浏览器的技术实现的,跨平台。
在这里,要介绍两种实现 C/Cpp 代码自动补全,函数跳转的实现方法。
如果网络通,以下方式设置代理:
1、点击文件 -> 首选项 -> 用户设置
2、在右侧添加代理配置
"http.proxy": "http://xxx.xxx.com.cn:80",
"http.proxyStrictSSL": false
3、重启VS code, 点击侧边栏的Extensions按钮,键入python
设置代理后,进入 查看菜单-扩展,输入插件。
或者采用查看-命令面板-从VSIX安装离线文件安装下面2个插件。插件在外网可以从网页下载。
微软自家的 C/C++ 第一个插件。 ms-vscode.cpptools
下载gtags 第二个插件 , C++ Intellisense(austin.code-gnu-global)
下载第三个软件gnu gtags ,解压即可。
安装第一个插件 cpptools , 微软自家的 C/C++ 插件 ms-vscode.cpptools
安装后重启 VSCode ,让插件生效。
经过测试,这种情况下新版微软c/c++cpptools 插件是经常不能跳转。原因待查。
最新补充:注意看到网上有说法,此款插件设置头文件路径即可跳转定义。但是对大型代码,头文件路径很多的情况,貌似不是很可行,需要的可自行测试,有结果方便请共享一下评论一下。多谢!
本文推荐通过安装下面的 解析gtags符号的 C++ Intellisense插件和 gtags软件,经过测试可以完美跳转符号定义。无需任何操作,只需要生成符号缓存,占用磁盘空间,即可跳转,空间换时间。
请安装第二个插件 C++ Intellisense(austin.code-gnu-global) , 同样点击重启生效。
接下来我们需要下载 第三个软件 gtags 来支持 C++ Intellisense 插件。插件可以从上方链接中第三个软件下载。
gtags 是一个类似CTag的,能够创建用于实现索引和自动补全功能所需的Tag的程序。下载 gtags可以去官网下载源代码自己编译,或者直接下载它提供的Win32安装包。 由于我们是在 windows 操作系统下,所以我们在官网下载页面 (http://adoxa.altervista.org/global/)下,选择win32 下载 。其他系统可以根据需要下载。
下载完成后,解压缩,可以看到里面包含 3 个文件夹。我们需要把 glo656wb\bin 目录 添加到 windows系统环境变量path。 (特别注意,不要将这个glo656wb目录放到 vscode的安装目录,每次vscode自动更新会将目录清除掉)
注意:系统变量需要在新打开cmd窗口set path=1后关闭cmd窗口才能立即生效 。
path生效后,用 VSCode 打开你的工程文件夹(C/C++源码目录),按下快捷键ctrl+shift+C , 输入 gtags (运行的是glo656wb\bin 目录下的gtags.exe),运行。可以看到在工程文件夹下生成了 3 个文件,分别是: GPATH、GRTAGS、GTAGS ,这表明,我们的 gtags 开始正常工作啦。
也可以cmd进入工程文件夹,再运行gtags
按Ctrl键并使鼠标指向某个函数,您将看到这个函数的提示信息,点击可以跳转到定义、查找引用(shift+F12)、自动补全、列出符号等(ctrl+P,输入@)。
这时候你就会发现可以使用 Go to definition 进行跨文件跳转啦~
建议按库进行工作文件夹设置。
注意还有以下问题待解决:
1)微软自家的 C/C++ 插件 ms-vscode.cpptools 也会产生大的索引文件,放在安装目录中。占用磁盘空间。所以如下目录所在C盘建议预留较大空间。C:\Users\用户名\AppData\Roaming\Code\User\workspaceStorage
2)如果加多个文件夹到工作区,目前还没有找到方法在多个文件夹中跳转。一般就是文件夹内部跳转。
3)注意samba共享的远程服务器文件夹,可以映射到windows上作为一个网络硬盘,如Z盘之类,和本地盘一样操作即可。
4)对大型软件,建议分平台、产品等进行工作文件夹分开编译gtag文件,可能过大会有异常。
5) gtags运行结果有 gtags: dbop_put failed.
如果需要可以打开自动补全功能,按下快捷键 Ctrl+P, 输入 settings, 在打开的 settings.json 文件中 设置以下代码,开启 C/C++ 插件自带的代码补全功能。
"[cpp]": {
"editor.quickSuggestions": true
},
"[c]": {
"editor.quickSuggestions": true
}