笔者在使用vscode的Claude for vscode插件的Ask before edit模式时,发现在修改代码时,不会在vscode的代码编辑窗口中显示内联差异视图,而只是显示在与Claude的聊天框窗口中。经过在A/的GitHub仓库的issue中寻找,发现解决办法如下:
GitHub - russellgilbert/claude-code-diff-fix: Script to fix Claude Code not opening a side-by-side diff tab in VS Code. · GitHub
这是一个已知的CRLF 行尾符问题。
问题分析
根本原因:
- Windows 文件使用 CRLF (
\r\n)- 你的代码文件使用 Windows 风格的行尾符 - Claude Code 的编辑字符串使用 LF (
\n)-Claude的 Edit 工具生成的oldString使用 Unix 风格 - 多行编辑匹配失败- 当进行多行编辑时,
"line1\nline2"无法匹配文件中的"line1\r\nline2" - 静默回退- 匹配失败后,扩展静默回退到聊天窗口的内联 diff,不打开侧边 diff 标签
为什么单行编辑可以工作:单行编辑没有换行符,所以不存在不匹配问题。
解决方案
这个修复脚本patch_claude_crlf.js可以解决这个问题。你需要:
运行补丁脚本:
node 你的脚本存放路径\patch_claude_crlf.js重新加载 VSCode:
- 按
Ctrl+Shift+P - 输入 "Developer: Reload Window"
- 回车
- 按
验证修复:
- 打开一个 CRLF 文件(VSCode 右下角会显示 CRLF)
- 让claude进行多行编辑
- 应该会看到侧边 diff 预览
注意:每次 Claude Code 扩展更新后,你需要重新运行这个补丁脚本。
脚本来自:GitHub - russellgilbert/claude-code-diff-fix: Script to fix Claude Code not opening a side-by-side diff tab in VS Code. · GitHub