启用同步滚动需先分屏:右键标签页→“移动到另一视图”,再勾选“视图→垂直/水平同步滚动”;未分屏则静默失效,且两视图需状态一致(如都可写、换行设置相同),否则视觉不同步属正常。

怎么启用垂直/水平同步滚动
Notepad++ 的同步滚动不是默认开启的,必须手动触发,而且它只对“已分屏”的两个视图生效——也就是说,光打开两个文件标签页没用,得先拆成左右或上下两个独立编辑区。
实操路径很直接:视图 → 垂直同步滚动(或 水平同步滚动),勾选即可。此时如果你已经用右键菜单把第二个文件“移动到另一视图”,滚动会立刻生效;如果还没分屏,它会静默失败,不报错也不提示。
- 右键标签页 → “移动到另一视图” 是最稳妥的分屏方式,比拖拽更可靠
- “复制到另一视图”会保留原标签,适合想对比修改前后版本
- 启用后,任意一窗滚动,另一窗自动追齐;但若两窗内容行数差异大(比如一个空行多、一个压缩了),可能视觉上“不同步”,这是正常行为,不是 bug
为什么滚动不同步?常见失效场景
同步滚动看似简单,实际掉坑最多的地方是「视图状态不匹配」。Notepad++ 不同步滚动值,而是同步 m_leftScrollValue 和 m_rightScrollValue 两个内部变量,一旦它们不一致,就发信号触发重置——但前提是两个视图都处于可滚动状态。
- 一个视图是只读模式(如日志文件被其他程序占用),滚动事件可能被拦截,导致同步中断
- 某窗口启用了“自动换行”,而另一个没开,行高计算逻辑不同,
setLeftScrollValue()收到的 value 实际映射位置偏移,看起来像“卡住” - 插件干扰:比如
MarkdownViewer++在右侧开了预览面板,它会劫持部分滚动事件,此时再开垂直同步滚动,可能互相冲突
同步滚动和 MarkdownViewer++ 能共存吗
能,但必须明确分工:MarkdownViewer++ 的 syncCurScrollValue() 是专为编辑区 ↔ 预览区设计的,它监听的是编辑器光标位置和滚动像素,而 Notepad++ 内建的同步滚动监听的是视图的 SCN_SCROLL 通知——两者底层机制不同,强行同时启用垂直同步滚动 + MarkdownViewer++ 同步滚动,会导致预览区跳动或滞后。
- 纯代码/文本对比:关掉
MarkdownViewer++的同步滚动,在 Notepad++ 主菜单开 垂直同步滚动 - 写 Markdown 时看效果:关掉 Notepad++ 的同步滚动,只留
MarkdownViewer++的同步(在插件设置里勾选Sync scroll position) - 别混用——它们的
syncCurScrollValue(0)和syncCurScrollValue(1)信号源不同,叠加后逻辑不可控
分屏比例调不准?试试 Shift + 拖拽
分屏后那个灰色分隔条(splitter)看着难控制,其实 Notepad++ 内置了吸附逻辑,只是没写在菜单里。
- 鼠标悬停到分隔条,光标变双向箭头后,按住
Shift键再拖拽,它会自动吸附到 25% / 50% / 75% 三个关键位置 - 想快速均分?双击分隔条,两窗立即等宽(垂直分屏)或等高(水平分屏)
- 如果拖不动,检查是否误启用了“锁定工具栏”(视图 → 锁定工具栏),这个开关有时会意外锁住 splitter










