code --diff 是唯一能绕过 UI 直接触发文件对比的命令行方式,需提供两个完整绝对路径,路径含空格或中文须用英文双引号包裹,不支持相对路径、通配符和 ~ 符号。

code --diff 命令行参数是唯一能绕过 UI 直接触发对比的方式
VSCode 不支持在已运行实例中通过命令行追加 --diff 来打开新对比窗口——它只会启动新窗口(哪怕已有实例)。所以这个操作本质是“启动一个专用的、仅用于比对的 VSCode 实例”,适合脚本调用、CI 日志检查或临时比对场景。
-
code --diff必须跟两个**完整绝对路径**,相对路径、通配符、~ 符号都会失败 - 路径含空格或中文时,必须用英文双引号包裹,例如:
code --diff "/Users/me/Desktop/配置备份.json" "/Users/me/Downloads/最新配置.json" - 如果目标文件不存在,VSCode 会静默创建空文件并对比——不是报错,容易误判为“比对成功”
- 该命令不读取当前工作区设置,所有 diff 行为按用户全局设置(
settings.json)生效,比如diffEditor.ignoreTrimWhitespace
Windows 下需注意 cmd/powershell 的路径处理差异
PowerShell 默认把反斜杠 当转义符,直接写 code --diff C:ile1.txt C:ile2.txt 会报错“无法识别的参数”。必须改用正斜杠或双反斜杠:
- 推荐用正斜杠:
code --diff C:/a/file1.txt C:/b/file2.txt - 或双反斜杠:
code --diff C:\a\file1.txt C:\b\file2.txt - cmd.exe 相对宽容,但路径含空格仍需双引号
对比窗口关闭后,进程不会自动退出
执行 code --diff 启动的 VSCode 实例,即使你关掉所有编辑器标签页,主窗口最小化或隐藏后,进程仍在后台运行。多次执行会累积多个 Code Helper 进程,占用内存。
- 想彻底退出,必须手动关闭窗口(macOS 点红叉,Windows 点右上角 ×),不能只关 Diff 标签页
- 脚本中如需自动清理,可在启动后加
&& sleep 5 && osascript -e 'quit app "Visual Studio Code"'(macOS)或用taskkill(Windows),但有风险——可能误杀其他 VSCode 实例 - 更安全的做法是:用
code --diff+--new-window组合,并在对比完成前不重复调用
编码不一致会导致“no differences”或整行标红
code --diff 是字节级比对,不自动探测编码。若一个文件是 UTF-8 with BOM,另一个是 GBK,VSCode 会把每个字节当独立字符处理,结果几乎全红全绿,甚至显示 no differences(因 BOM 导致首行哈希错位)。
- 比对前先确认编码:用
file -i path/to/file(macOS/Linux)或 PowerShell 的Get-Content -Path file.txt -Encoding Byte | Select -First 4查 BOM - 统一为 UTF-8(无 BOM):用 VSCode 打开文件 → 右下角点击编码名 →
Reopen with Encoding→ 选UTF-8→ 再点一次 →Save with Encoding - 换行符也要一致(
LFvsCRLF),否则每行末尾都被视为差异
code --diff 看起来就像失效了。


















