真正禁闪的唯一可靠方式是设"caret_style": "solid"并同时清零"caret_extra_top": 0、"caret_extra_bottom": 0、"caret_extra_width": 0;缺一不可,否则高DPI或远程桌面下会因像素对齐异常导致伪闪烁。

Sublime Text 4.4+ 中,caret_blinking 已完全失效,设为 false 毫无作用;真正让光标常亮不闪烁的唯一可靠方式是用 "caret_style": "solid" 并清零三项额外尺寸参数。
为什么只设 caret_style 为 "solid" 还在闪
“看起来没闪”不等于“真正停闪”。"solid" 确实跳过了动画调度器,但若 caret_extra_top、caret_extra_bottom 或 caret_extra_width 任一值非零,Sublime 会强制启用状态刷新逻辑,导致高 DPI 缩放、远程桌面或某些 UI 主题下出现像素级抖动或微位移,被误判为“伪闪烁”。
-
caret_extra_top和caret_extra_bottom控制光标上下延伸像素,设为非零时会触发重绘对齐计算 -
caret_extra_width在"solid"模式下虽不加粗,但残留值仍参与布局校验,引发视觉不稳定 - 哪怕只漏掉一个,比如只写了
"caret_extra_top": 0却忘了caret_extra_bottom,就可能在 macOS Retina 屏上看到光标轻微跳帧
caret_style 各值是否真能禁闪
不是名字说了算,而是底层渲染路径决定是否闪烁。Sublime 的光标动画不是靠开关控制,而是由样式类型绑定绘制逻辑:
-
"solid":唯一原生静态模式,渲染为纯色矩形,不依赖帧定时器,也不响应系统光标设置 -
"phase"和"smooth":本质仍是动画——前者亮度周期变化,后者透明度渐变,即使设blink_interval为 0 也会被忽略并回退到最小周期 -
"wide"和"block":仍走闪烁逻辑;"block"在部分 build 中甚至不支持高 DPI 对齐,容易错位或消失 -
"underline":静态下划线,不闪烁,但小字号或等宽字体(如 Fira Code)下几乎不可见
改完设置不生效?先查这三类干扰源
配置写对了、保存了、JSON 格式也合法,光标却还在动?大概率不是 Sublime 本身的问题:
- 插件劫持:
BlockCursor、Vintageous、FocusMode等插件会在运行时接管光标渲染,用户设置全被覆盖;临时禁用插件验证最直接 - UI 主题覆盖:Material Theme、Ayu 等主题常在 theme 文件中硬编码
caret相关样式;切回"theme": "Default"再试 - 硬件加速冲突:开启
"gpu_window_buffer": true时,"smooth"或"block"易出滚动残影;"solid"不受影响,但若你误配了其他样式,就会被连带干扰
必须只改右侧「User」面板,且 JSON 语法不能有半点错误
左侧 Default 面板里的任何修改都无效,升级后还会被覆盖。用户配置必须写在 Preferences → Settings 右侧的 Settings – User 中,且格式严格:
- 必须用英文双引号包裹键名和字符串值,比如
"caret_style",不能写成'caret_style'或caret-style - 最后一项后面不能有逗号,否则整个 JSON 解析失败,设置静默失效
- 如果右侧原本为空,先输入
{},再往里填字段,避免空文件导致 fallback 到默认行为 - 改完按
Ctrl+S(Windows/Linux)或Cmd+S(macOS)保存,立即生效,无需重启
真正禁闪不是调参数,而是换渲染路径;"solid" 是唯一绕过动画管线的入口,但它的稳定性极度依赖配套参数的“归零”动作——这不是可选项,是硬约束。


















