code --diff 是 vscode 命令行原生双文件对比命令,左侧为基准文件、右侧为变更文件,路径含空格需加英文双引号,仅支持真实磁盘文件且参数顺序不可颠倒。

用 code --diff 直接比较两个文件
VSCode 命令行工具支持原生的双文件差异对比,不需要插件或额外配置。核心命令是 code --diff,后跟「左侧文件路径」和「右侧文件路径」,顺序不能颠倒——左侧是基准(original),右侧是变更(modified)。
常见错误是路径含空格或特殊字符时未加引号,导致命令只读取到第一个单词就报错:File not found 或 command not found。Windows 用户还需确认是否已将 VSCode 添加到系统 PATH(安装时勾选 “Add to PATH”)。
-
code --diff ./a.txt ./b.txt—— Linux/macOS 下最简用法 -
code --diff "C:\temp\config.old.json" "C:\temp\config.new.json"—— Windows 下必须加英文双引号 - 如果当前没打开任何窗口,VSCode 会新建一个;如果已有实例,会在该实例中新开一个差异编辑器标签页
对比未保存内容或临时文件时的替代方案
code --diff 只接受磁盘上真实存在的文件路径,无法直接比对剪贴板内容、标准输入或内存中的字符串。遇到这类场景,得先落地为临时文件。
例如想比对当前 shell 中的两段 JSON 输出:
echo '{"name":"alice"}' > /tmp/left.json
echo '{"name":"bob","age":30}' > /tmp/right.json
code --diff /tmp/left.json /tmp/right.json
macOS 用户可用 mktemp 更安全地生成路径;Linux 下可结合 trap 在退出前清理。注意:不要用 /tmp 存敏感配置,临时文件权限默认可能被其他用户读取。
在 Git 工作流中快速对比暂存区与工作区
Git 用户常需要看某个已修改但未暂存的文件和暂存版本的差异。VSCode 本身不提供 git diff --cached 的快捷入口,但可以组合使用:
- 用
git show :path/to/file > /tmp/staged提取暂存区内容(:是 Git 的“暂存区引用符”) - 再执行
code --diff /tmp/staged path/to/file - 更省事的方式是:在 VSCode 图形界面里右键文件 → “Open Changes”,但命令行启动时无法触发这个上下文
注意:git show :file 读取的是暂存区快照,不是 HEAD;若想比对 HEAD 和工作区,应改用 git show HEAD:file。
启动后无法聚焦差异视图?检查 VSCode 版本和参数顺序
旧版 VSCode(1.70 之前)对 --diff 的支持不稳定,可能出现只打开空白窗口、或把两个文件以普通编辑器并排打开的情况。升级到最新稳定版即可解决。
另一个高频陷阱是参数顺序写反:
-
code --diff a.js b.js→ 正确:a.js 是 base,b.js 是 modified -
code a.js b.js --diff→ 错误:VSCode 把--diff当作全局选项而非子命令,忽略它
VSCode CLI 不支持长参数混排,--diff 必须紧接在 code 后,且后面只能跟两个路径参数。多于两个路径会报错:Too many arguments provided. Only two file paths are allowed.











