Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Opened ChangesNew to Visual Studio Code? Get it now.
Opened Changes

Opened Changes

leiipo

|
1 install
| (0) | Free
标注文件自打开(或上次标记基线)以来被新增、修改、删除的行,类似 Source Insight 的改动标记。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Opened Changes

标注文件自打开(或上次建立基线)以来被新增、修改、删除的行,行为接近 Source Insight 的改动标记。

  • 只画左侧行标,不改背景、不改行内文字
  • 黄色竖线 = 还没保存,绿色竖线 = 已保存;保存后黄线自动转绿并继续保留
  • 删除位置不画竖线(避免看成这一行被改过),只在概览标尺留色块,悬停可看被删掉的原内容
  • 状态栏显示 +新增 ~修改 -删除,有未保存改动时带一个圆点
  • 标记一直保留到手动「设为基线」或关闭文件

安装 / 调试

本扩展没有第三方运行时依赖,纯 CommonJS。

方式一:F5 调试(开发)

  1. 用 VS Code 打开本目录 change-tracker
  2. 按 F5,会启动一个“扩展开发宿主”窗口
  3. 在宿主窗口里打开任意文件并编辑,即可看到改动标注

方式二:打包成 .vsix 安装(日常使用)

npm install                       # 安装 vsce / 类型定义(仅开发需要)
npm run package                   # 产出 opened-changes-0.2.2.vsix
code --install-extension opened-changes-0.2.2.vsix

安装后重载窗口(命令面板 → Developer: Reload Window)即可生效。 卸载:code --uninstall-extension leiipo.opened-changes。

命令(命令面板 Ctrl/Cmd+Shift+P)

命令 说明
Opened Changes: 启用/停用改动标注 全局开关
Opened Changes: 将当前内容设为基线 清除全部改动标记,从这里重新计数
Opened Changes: 跳到下一个改动 Alt+]
Opened Changes: 跳到上一个改动 Alt+[
Opened Changes: 复制当前行的原始内容 光标在改动行时复制该块的原始内容;否则复制整个基线内容
Opened Changes: 显示与基线的差异 打开只读 diff 视图(基线 ↔ 当前)

设置

设置 默认 说明
openedChanges.enabled true 总开关
openedChanges.colors.unsaved #e2b93d 未保存改动的行标颜色(黄)
openedChanges.colors.saved #3fb950 已保存改动的行标颜色(绿)
openedChanges.showDeletedLines true 是否在概览标尺标出删除位置(悬停可看原内容)
openedChanges.statusBar true 状态栏统计
openedChanges.maxFileLines 200000 超过则停止追踪并释放快照;恢复到限制内后建立新基线
openedChanges.copyOriginalOnEmptyLine false 光标在空行时“复制原始内容”是否复制该行原始文本

工作方式

每个文件保留两个比较基准:

快照 何时更新 作用
打开快照 文件打开时 / 手动「设为基线」 决定“哪些行变过”(绿色保留多久)
已保存快照 每次保存后 决定“哪些行还没保存”(黄色)

于是每行的颜色只取决于两件事:

  • 和已保存快照不同 → 未保存,黄色
  • 只和打开快照不同(已经保存过)→ 已保存,绿色
  • 两份都一样 → 不标注

文档变化时,按编辑范围更新当前行列表,未变的行与基线共享文本;120ms 防抖后再计算行差异(小区域用 LCS,大文件用“两边唯一行”做锚点切分),合并成带状态的改动块,用 TextEditorDecorationType 只画左侧竖线。改动块中未变的行不会被误标。

内容没有再次变化时,保存直接复用差异结果并更新黄/绿状态。隐藏文件、停用期间不安排后台差异计算,重新显示或启用时再刷新;同一文件的所有分屏都会同步更新。

绘制只传行号范围,悬停时才读取原始/当前内容(每侧最多 20 行,长行截断),避免为大量标记批量生成悬停文本。重复切换到同一版本不会重画。

一个块里只要有一行还没保存,整块显示为黄色。

和 VS Code 自带 Git 标记的区别

自带 Git 标记比较的是 HEAD,保存/提交后就会消失;本扩展比较的是文件打开时的内容,所以未提交、已提交甚至没有 git 仓库的文件都能看到“本次编辑改了什么”。两套标记可以同时显示;如果觉得左侧太花,可以把内置的关掉:"git.decorations.enabled": false。

已知限制

  • 只追踪磁盘文件(file scheme),未命名缓冲区(untitled)不参与
  • 文件行数超过 openedChanges.maxFileLines(默认 20 万)时停止追踪并释放快照;文件缩小或提高限制后,以当时内容重新建立基线
  • 外部工具改写文件内容时,改动会按“相对打开时的内容”照常显示

项目结构

src/
  extension.js        扩展入口:生命周期、命令、状态栏
  tracker.js          每个文档的两份快照 + 改动块状态(含 saved/unsaved)
  baseline.js         基线快照(纯逻辑,可单测)
  diff.js             行差异与改动块合并(纯逻辑,可单测)
  navigation.js       上/下一个改动(纯逻辑,可单测)
  decorations.js      装饰类型(黄/绿行标样式与配色)
  renderer.js         把改动块画到编辑器
  hover.js            悬停时按需读取改动内容
  contentProvider.js  提供只读“基线内容”用于 diff 视图
  test/               node --test 单元测试
  test/integration/   在真实 VS Code 扩展宿主里跑的集成测试

测试

npm test               # 单元测试 + 用假 vscode 模块的冒烟测试
npm run check          # JavaScript 类型检查
npm run test:integration   # 在真实 VS Code 里启动扩展宿主跑命令
npm run benchmark      # 独立进程中测量耗时、额外内存和 API 调用次数
  • npm test 覆盖 diff / baseline / navigation / tracker 的逻辑和扩展主链路,包括批量编辑、撤销、CRLF、15 万行粘贴、保存前防抖、分屏、懒加载悬停、超限保护和关闭后的清理。
  • npm run test:integration 创建独立的临时 VS Code 配置目录,执行命令、悬停、真实批量编辑和 10 万行编辑保存测试,结束后自动关闭;终端会输出本次报告的路径。可通过 VSCODE_BIN 指定 VS Code 可执行文件。
  • npm run benchmark -- --source /path/to/other/checkout 可以用相同负载测量另一份源码。每个场景默认运行三次,耗时和常驻内存取中位数;这里的内存是扩展状态额外保留的 Node heap / ArrayBuffer,不代表整个 VS Code 的进程占用。

测量结果、具体负载和复现方法见 docs/performance.md。

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