Sublime Text 无原生滚动时保持光标居中功能,需通过自定义插件监听 on_selection_modified 并调用 view.show_at_center(point) 实现;推荐保存为 Packages/User/center_cursor.py,注意 ST3 需加节流防卡顿。

Sublime Text 里没有原生的“滚动时保持光标居中”功能
这是个常见误解。Sublime Text 的 scroll_to_point、move 等命令默认不会自动重置视图中心;它只移动光标,不调整 viewport。所谓“光标居中”是编辑器主动对齐行为,而 Sublime 默认仅在跳转(如 goto_definition)或新行插入时做有限居中,**滚动本身(鼠标滚轮、方向键、PageUp/PageDown)完全不触发居中逻辑**。
用插件 ScrollSync 或自定义 Python 插件实现
官方 Package Control 中较稳定的是 ScrollSync,但它侧重多窗格同步,对单视图居中支持弱。更直接的方式是写一个轻量插件,监听 on_selection_modified 并调用 show_at_center:
import sublime import sublime_pluginclass CenterCursorOnScrollListener(sublime_plugin.ViewEventListener): def on_selection_modified(self):
避免在输入过程中频繁触发(比如打字时选区连续变)
if self.view.is_auto_complete_visible() or self.view.is_popup_visible(): return sel = self.view.sel() if not sel: return for region in sel: self.view.show_at_center(region.a)保存为
Packages/User/center_cursor.py即可生效。注意:show_at_center是视图方法,不是命令,不能通过sublime-command绑定到快捷键。为什么不用
scroll_to命令或"auto_indent": true?这两个常被混淆:
-
scroll_to是命令,需显式调用,且参数是像素偏移量,无法感知光标位置 -
"auto_indent"控制缩进行为,和视图滚动完全无关 - 设置
"always_show_minimap": true或调整"line_padding_top"只影响 UI 外观,不改变滚动锚点
真正起作用的只有 view.show_at_center(point),且必须在光标实际移动后调用——所以监听 on_selection_modified 是最准的时机。
容易被忽略的兼容性细节
这个插件在 Sublime Text 4(build 4143+)上工作良好,但在 ST3 中部分 build 会因事件触发频率过高导致卡顿。建议加简单节流:
- 用
sublime.set_timeout延迟 50ms 执行show_at_center - 避免在多光标(multiple selections)场景下对每个 region 都调用,只处理第一个
region.a - 禁用该功能时,直接删掉
center_cursor.py文件即可,无需卸载包
别指望设置里勾个选项就搞定——Sublime 的滚动模型就是“光标随内容走”,居中得靠代码补全这一环。










