Sublime Text 光标停闪需设 "caret_style": "solid" 且 "caret_animation_enabled": false;单独设 "caret_blinking": false 多数版本无效,因其行为依赖 caret_style 渲染路径。

Sublime Text 的光标闪烁不是靠“开/关”控制的,而是由 caret_style 渲染逻辑决定的;想彻底停闪,必须用 "solid" 或 "block" 配合 "caret_animation_enabled": false,单独设 "caret_blinking": false 在多数 build 下无效。
为什么改了 caret_blinking 还在闪?
因为 caret_blinking 仅控制「是否启用闪烁逻辑」,但它的实际行为严重依赖 caret_style。比如:
-
"caret_style": "phase"或"smooth"时,即使"caret_blinking": false,光标仍会按周期明暗变化(只是没了缓动) -
"caret_style": "solid"才真正跳过动画流程——它压根不走显隐切换,自然不闪 - ST4 build 4143+ 开始,
"caret_blinking"行为才趋于稳定;旧版 ST3 建议直接弃用该字段,专注配caret_style+caret_animation_enabled
caret_style 各值的真实表现差异
每个值对应不同渲染路径,影响视觉、性能和兼容性:
-
"solid":实心竖线,无动画,最稳;caret_extra_width对其有效,可加粗(尤其高 DPI 屏) -
"block":覆盖整个字符区域,适合 Vim 模式;但等宽字体下可能略宽,font_size≥14 时易挤邻字 -
"underline":只画基线,小字号或某些字体(如"Fira Code")下几乎不可见 -
"phase"和"smooth":都带动画,macOS 显卡驱动下易卡顿或跳帧;GPU 渲染开启时"smooth"可能滚动残影 -
"wide"不是“块状”,只是加粗竖线,仍会闪;且远程桌面或缩放场景下偶有渲染错位
哪些配置项必须一起写?
单独改一个参数大概率失效,尤其主题或插件介入后:
- 停闪必备组合:
"caret_style": "solid"+"caret_animation_enabled": false - 防主题干扰:显式写死
"caret_extra_top": 0、"caret_extra_bottom": 0、"caret_extra_width": 0(缺一不可,否则某些 UI 主题会偷偷加 padding) - 别碰左侧默认设置:所有修改必须在
Preferences → Settings右侧的Settings – User区域,JSON 语法要合法(逗号不能多也不能少) - 插件优先级更高:像
BlockCursor、FocusMode会劫持光标样式,怀疑被覆盖时先禁用测试
VSCode 用户容易踩的坑(对比提醒)
如果你刚从 VSCode 切过来,注意 Sublime 没有 editor.cursorBlinking 这种字段,也不存在 "expand" 或 "phase" 以外的动画类型:
- VSCode 的
"solid"是「不闪」,Sublime 的"solid"是「不走动画逻辑」,语义接近但实现机制不同 - Sublime 不支持原生光标颜色配置,想改色得走
.tmTheme文件或插件;VSCode 可用workbench.colorCustomizations直接配"editorCursor.foreground" - VSCode 的
blink_interval类似 Sublime 的同名字段,但 Sublime 中它在旧版里支持度差,不如直接用caret_animation_enabled
真正难的不是写哪几行,而是确认当前生效的到底是用户设置、主题文件,还是某个插件——三者冲突时,主题和插件永远赢。建议先清空用户设置,逐项加,边保存边观察效果。

















