VSCode代码对比视图默认开启同步滚动,但手动滚动任一侧即静默退出同步模式,右上角按钮仅临时对齐;强制同步需按住Alt/Option键滚动,永久禁用可取消标签页中“Sync Scrolling”勾选。

VSCode 的代码对比视图默认开启同步滚动,但这个“联动”只在你没主动干扰时才生效;一旦你手动滚动任一侧,它就会静默退出同步模式,且不提示、不恢复——这是最常被误认为“bug”的行为。
为什么对比窗口突然不联动了?
这不是设置失效,而是 VSCode 的滚动策略本身是“按需同步”:
- 刚打开对比视图时,
sync scrolling是启用的,两侧会保持垂直位置一致 - 只要你用鼠标滚轮、方向键或拖动滚动条单独滚动某一边,VSCode 就立即解除同步,且不会重置开关状态
- 右上角的同步按钮(两个上下箭头图标)只是手动触发一次对齐,不是“锁定开关”
- 该行为在
diffEditor.renderSideBySide: true和false下均存在,与布局无关
如何真正控制同步/独立滚动?
靠右上角那个按钮只能临时对齐,要稳定控制,得用这三种方式:
- 想强制同步:滚动前先按住
Alt键再滚(Windows/Linux),macOS 是Option;松开即恢复独立 - 想永久禁用同步:右键编辑器标签 → 取消勾选
Sync Scrolling(仅在同文件多视图或 diff 视图中出现) - 想彻底关闭自动同步逻辑:在
settings.json中设"diffEditor.experimental.useSynchronizedScrolling": false(注意这是实验性配置,部分版本可能不识别)
独立滚动时容易踩的坑
你以为只是“各看各的”,其实有几处隐性耦合:
- 光标跳转(如
Ctrl+G)仍会把两侧都带到目标行,哪怕已禁用同步滚动 - 点击差异块上的
→或←按钮应用更改后,VSCode 会自动把光标和视图重新居中到该行,可能打断你正在看的上下文 - 如果你在对比两个不同分支的文件,而其中一侧被外部工具修改(比如 git stash pop 后),VSCode 不会自动刷新视图,必须手动关闭重开,否则滚动位置和内容可能错位
真正关键的点在于:VSCode 没有“全局滚动锁定”概念,它的同步是瞬态策略而非持久状态。每次操作都要判断当前是否需要联动,而不是依赖一个开关记住你的偏好。


















