VSCode 1.118 内置 diff 已支持语法感知的 token 级差异高亮,插件仅用于扩展原生未覆盖场景(如跨分支批量比对、Git 钩子触发);diff2html 专注 HTML 渲染展示,GitLens 聚焦编辑器内工作流增强。

VSCode内置diff对比已支持高亮差异,插件只是锦上添花
VSCode 1.118 自带的文件对比(Ctrl+Shift+P → File: Compare Active File With...)默认就启用语法感知的差异高亮,包括关键字、字符串、注释等 token 级别着色。装插件不是为了“实现差异”,而是解决原生能力覆盖不到的场景,比如跨分支批量比对、行内语义合并、或 Git 钩子自动触发。
diff2html 和 GitLens 的核心分工要分清
常见误判是把二者当同类工具用——其实定位完全不同:
-
diff2html是纯展示型:把 Git 命令输出的 raw diff 渲染成带语法高亮的 HTML 页面,适合嵌入 CI 报告或 PR 评论,不介入编辑器交互 -
GitLens是工作流型:在编辑器内直接高亮当前文件与 HEAD/branch/stash 的差异,支持点击跳转、hover 查看作者、一键回退某行,但它的“高亮”本质是叠加层,不修改 token 颜色 - 两者都依赖
editor.diffEditor.renderSideBySide和editor.diffEditor.ignoreTrimWhitespace这类基础设置,改错这里,插件再强也白搭
真正影响差异可读性的三个隐藏配置
很多人调了半天插件颜色,却忽略 VSCode 底层 diff 渲染机制本身在“偷懒”:
-
"diffEditor.renderIndicators": true—— 关闭后,左侧 gutter 里增删标记(+/-图标)消失,只剩背景色,极易漏看空行变更 -
"diffEditor.ignoreTrimWhitespace": false—— 设为true会过滤空格变化,但团队协作中常需保留这类“格式洁癖”差异,建议关掉 -
"editor.inlineSuggest.enabled": false—— 开启时,inline suggest 会和 diff 高亮重叠干扰,尤其在.ts文件里光标一动就闪,必须禁用
自定义 diff 高亮颜色必须绕过 theme 覆盖
想改删除行用 #ff4d4d、插入行用 #4caf50?别碰 workbench.colorCustomizations 里的 diffEditor.insertedTextBackground 这类字段——它们只控制块级背景,对 token 内部(如插入行里的 const 关键字)无效。
真要精细控制,得进 editor.tokenColorCustomizations 加 textMateRules:
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "meta.diff.header",
"settings": { "foreground": "#666" }
},
{
"scope": "markup.deleted.diff",
"settings": { "foreground": "#ff4d4d", "fontStyle": "strikethrough" }
},
{
"scope": "markup.inserted.diff",
"settings": { "foreground": "#4caf50" }
}
]
}
}
注意:markup.deleted.diff 这类 scope 必须用开发者工具(Help → Toggle Developer Tools → Inspect Editor Tokens)在 diff 视图里实测抓取,硬背 scope 名称大概率匹配失败。
diff 高亮最易被忽略的是语言模式切换——当你对比两个 .vue 文件时,VSCode 默认按 plaintext 解析 diff 内容,所有 token 规则失效;必须在 diff 标签页右下角手动点开语言模式,选 Vue 才能激活语法高亮。


















