Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>CIndex: C/C++ NavigationNew to Visual Studio Code? Get it now.
CIndex: C/C++ Navigation

CIndex: C/C++ Navigation

tuya-dengcong

|
1 install
| (0) | Free
C/C++ code navigation, call hierarchy and symbol highlight without compilation
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

CIndex

免编译的 C/C++ 全局代码索引 —— 跳转定义、调用关系、符号浏览与同名高亮。

为什么用 CIndex

  • 零依赖与开箱即用 —— 无须预先构建工程,基于纯静态分析引擎,可完整索引头文件、未参与构建的代码段及跨平台条件编译分支。
  • 极佳的内存控制与海量代码承载能力 —— 针对超大型工程深度优化。
  • 高性能与毫秒级响应
    • 首次全量索引:分钟级完成;
    • 单文件增量更新:亚秒级响应;
    • 代码跳转延迟:约 7 ms;
    • 编辑器冷启动恢复:仅需 1.9 s。
  • 智能无感后台调度 —— 精细化资源隔离,保障开发过程流畅。支持 线程数上限限制、跨进程 CPU 预算管控、进程优先级下沉、过载自动限速 四重可配置策略,确保后台索引不占用核心开发资源。

性能实测

真实工程、单机 8 线程实测。工作量:A = 28,153 个 C/C++ 文件 / 988,668 个符号 / 1,375,921 条调用边;B = 21,925 个文件 / 820,789 个符号 / 1,007,253 条调用边。

指标 实测
首次全量建索引(A) 64 ~ 99 秒
无改动重新同步(A) 0.57 秒
改动 1 个文件后同步(A) 0.62 秒
跳转定义响应(A) 约 7 ms(含读取源码与文件内解析的完整往返)
重启恢复快照(B) 1.9 秒
索引快照体积(B) 337 MB
索引后常驻内存(B) 315 MB(≈ 0.45 KB / 符号)
  • 增量同步只重新解析变更过的文件,其余靠时间戳比对 —— 「改一个文件」与「什么都不改」都是亚秒级,成本主要在遍历目录而不是解析。
  • 病态文件不会拖住整轮同步:单个文件解析超过 3 秒即放弃,超过 12 秒的墙钟死线强制跳过。工程 A 实测有 11 个超大生成头文件被跳过,整轮同步照常完成,被跳过的文件会记进运行日志。

功能

跳转定义

Ctrl/Cmd + 左键 或 F12,直接落到真实定义处。

  • 函数落到实现,类型落到定义所在的头文件 —— 只有声明的地方会继续找定义。
  • 覆盖函数、方法、结构体 / 类 / 联合 / 枚举标签、typedef、using 别名、宏、命名空间成员、类成员、文件级变量;头文件里同样能跳转。
  • 同一份头文件在工程里有多个副本时优先跳到「正本」;常见名字在多个作用域重复时按作用域与引用上下文消歧;候选按位置去重,同一个定义不会弹好几个候选框。
  • 认继承链 —— 点派生类里没有声明的成员(继承来的方法 / 字段)会沿继承链向上落到基类的定义;静态类型上只有纯虚声明(没有函数体)时,沿链向下落到实际的重写实现。多继承、隔代重写、跨文件派生都认。
  • 拿不准时不装作确定 —— 同名类分布在不同命名空间、或条件编译的两个分支同时被索引时,几个可能的基类会一起作为候选给出,而不是替你猜一个。

调用关系(只做入向)

  • 右键符号 →「CIndex: 显示调用者」,或调用关系视图,沿调用者一路向上展开;树节点单击即跳到对应代码行。
  • 只做入向(谁调用我)。读代码要回答的是「这个函数被谁用到、改动会波及哪条链路」;出向(我调用了谁)顺着函数体往下看就有,再开一棵树只是重复信息。

当前文件(符号浏览)

活动栏 CIndex 视图的「当前文件」页,两级分组:

  • 文件内符号(默认展开)—— 当前文件里的全部符号按源码行序平铺。每项左侧一个字母徽章标明类别:T 类型 / F 函数 / M 宏 / V 变量。单击跳转。
  • 同目录文件(默认折叠,首次展开才查询)—— 当前文件所在目录下其它已索引的文件,按文件名升序,单击即打开。

切文件、保存后自动刷新。列表按索引范围给出而不是按磁盘列 —— 被 cindex.skipDirs 排除的文件不会出现在列表里,不会出现「列表里有、点进去跳不动」。

符号高亮

  • 光标停在符号上按 F8,当前文件里所有同名位置一起高亮,再按一次取消;Shift + F8 强制取消。
  • 注释与字符串里的同名文字不会被点亮 —— 高亮按语法结构匹配,不是文本查找。
  • 不依赖索引:还没同步、或者文件从未保存过(有未保存的改动)都能正常工作,用的是编辑器缓冲区里的当前内容。
  • 深浅两套配色跟随编辑器主题自动切换;高亮位置同时标在滚动条上,长文件里一眼能看出别处还有哪几处。

其它

  • 语义着色 —— 同步完成后,宏 / 类型 / 枚举成员按索引结果分色(可用 cindex.semanticHighlight 关闭)。只对索引认识的名字生效,认不出的保持主题默认色。
  • 索引范围由你决定 —— 索引的是已添加的文件夹;默认只跳过隐藏目录,其余一律进入索引,要排除第三方库 / 生成代码用 cindex.skipDirs、要强行纳入隐藏目录用 cindex.keepDirs(优先级 keep > skip > 默认)。可写目录名(匹配任意层级),也可写相对索引根的路径后缀(带 / 时按路径匹配)。
  • 编辑器外的改动自动跟进 —— 保存文件即时增量索引;切分支(git checkout / git pull)、代码生成脚本、删除、重命名等发生在编辑器之外的变化,由文件系统监听合并后自动增量同步,一轮外部操作只会触发一次同步。只监听已添加的索引文件夹:文件夹在工作区内时覆盖其全部子目录,工作区外的文件夹受编辑器限制只能收到其直接子级的变化。索引尚未建立时不会触发 —— 首次索引仍然由你手动发起。可用 cindex.autoSyncExternal 关掉。
  • 同步全程有进度,随时可停 —— 状态栏持续显示已扫描规模与已耗时;长时间没有新进展会提示,并点名最常见的那个原因(索引文件夹在网络盘 / 共享盘上)。任意时刻点击状态栏即可取消,索引回到上一次完成的状态。
  • 持久化,重启免重建 —— 同步完成后索引自动快照到工作区下的 .cindex/,重开编辑器直接恢复;升级若改变索引格式,日志里会明确提示重新同步一次。
  • 后台索引时的机器保护 —— cindex.cpuBudget(整机所有索引进程共享的 CPU 预算,按并发进程数自动分片)、cindex.maxThreads(单引擎线程上限,默认按物理核数)、cindex.nice(优先级下沉,默认 10,I/O 走 idle)、cindex.throttle(宿主机过载时动态压 CPU 占用率)。

快速上手

  1. 打开 C/C++ 工程文件夹(文件 → 打开文件夹)。
  2. 点状态栏的 CIndex 按钮,或命令面板执行「CIndex: 同步代码索引」。首次是全量,进度显示在状态栏。
  3. Ctrl/Cmd + 点击 或 F12 跳转定义;右键符号 →「CIndex: 显示调用者」看调用链。
  4. 光标停在符号上按 F8 高亮同名位置。
  5. 之后正常写代码 —— 保存文件会自动增量索引;切分支、脚本生成代码、删除或重命名文件这类发生在编辑器之外的改动也会自动跟进,都不用手动同步。

工程大、首次同步慢的话,先用 cindex.skipDirs 排除掉第三方库和生成代码目录,索引量与耗时都会明显下降。

命令

命令 说明
CIndex: 同步代码索引 同步已添加的文件夹(默认增量)
CIndex: 取消同步 中断正在进行的同步
CIndex: 重建索引 清空后全量重建
CIndex: 添加索引文件夹 / 移除索引文件夹 维护索引范围
CIndex: 清空索引和缓存 内存与磁盘快照一起清掉
CIndex: 显示索引状态 文件数 / 符号数 / 调用边数 / 内存占用
CIndex: 显示调用者 光标处符号的调用关系
CIndex: 刷新符号与同目录列表 手动刷新「当前文件」视图
CIndex: 高亮光标处符号 / 取消符号高亮 高亮与取消(F8 / Shift+F8)
CIndex: 显示运行日志 打开「输出」面板的 CIndex 通道

快捷键

键位 命令 生效范围
F8 高亮光标处符号(再按一次取消) C/C++ 编辑器
Shift + F8 取消符号高亮 C/C++ 编辑器

编辑器默认把 F8 用作「转到下一个问题 / 错误」。本插件只在 C/C++ 编辑器里使用它;把设置 cindex.highlightKeybinding 关掉即可把 F8 还给编辑器,命令仍可从命令面板或右键菜单调用。换键位不必关掉它 —— 在「快捷键」里搜 CIndex 直接改,或在 keybindings.json 里为 cindex.highlightSymbol / cindex.clearHighlight 另绑,用户键位永远优先。

设置

设置项 默认 说明
cindex.semanticHighlight true 宏 / 类型 / 枚举成员的语义着色
cindex.highlightKeybinding true 是否占用 F8 / Shift+F8 作为符号高亮快捷键
cindex.autoSyncExternal true 编辑器外的文件改动(切分支 / 代码生成 / 删除 / 重命名)自动增量同步
cindex.skipDirs [] 追加跳过的目录(目录名,或相对索引根的路径后缀)
cindex.keepDirs [] 强制纳入的目录,优先级高于 skipDirs 与隐藏目录规则
cindex.maxThreads 0 单引擎线程上限,0 = 按物理核数自动
cindex.cpuBudget 0 整机所有索引进程共享的 CPU 预算(物理核),0 = 等于物理核数
cindex.nice 10 索引进程优先级下沉量,0 关闭
cindex.throttle true 宿主机过载时动态限制索引进程 CPU 占用
cindex.logLevel minimal 运行日志详略:minimal / verbose
cindex.enginePath "" 指定引擎可执行文件路径,留空用内置引擎

许可

MIT License

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft