JSON文件光标不闪烁的唯一可靠方案是设"caret_style": "solid"并同时设"caret_extra_top": 0、"caret_extra_bottom": 0、"caret_extra_width": 0,缺一不可。

Sublime 里 JSON 文件的光标闪烁样式,和其他所有文件类型一样,由全局 caret_style 控制,不是按语法单独配的。想让它不闪,只有一条路走通:设 "caret_style": "solid" 并清空三项扩展参数。
为什么改了 caret_style 在 JSON 文件里还是在闪
不是 JSON 特殊,而是配置没写对或被覆盖:
-
"caret_blinking": false在 ST4.4+ 完全失效,写了也白写 - 只加
"caret_style": "solid"不够——必须同步设"caret_extra_top": 0、"caret_extra_bottom": 0、"caret_extra_width": 0,缺一不可 - JSON 文件若用的是 Plain Text 语法(右下角显示 “Plain text”),Sublime 就不会触发括号匹配等逻辑,但光标样式仍走全局设置;不过这时你可能误以为“高亮没反应”,其实是语法识别失败,和光标无关
- Material Theme、Ayu 等 UI 主题常在
.sublime-theme文件里硬编码caret样式,直接压过用户 JSON 设置
怎么验证是不是主题或插件在捣鬼
别猜,直接切最小环境测试:
- Preferences → Settings – User 右侧,只保留这几句并保存:
{ "caret_style": "solid", "caret_extra_top": 0, "caret_extra_bottom": 0, "caret_extra_width": 0, "theme": "Default.sublime-theme" } - Ctrl+Shift+P → 输入
Package Control: Disable Package,临时禁用 BlockCursor、Vintageous、FocusMode 等所有光标相关插件 - 任务管理器杀掉所有
subl.exe进程,再重启 Sublime - 打开任意 .json 文件,光标应为稳定实心块——如果还闪,就是系统级设置在干预(Windows 高对比度 / macOS
IBInsertionPointBlinkPeriod)
caret_style 哪些值对 JSON 文件真正有用
JSON 是纯文本结构,不依赖特殊渲染路径,所以所有原生值都可用,但效果差异极大:
-
"solid":唯一真静态,填满字符区域,不闪烁、不抖动,适合深色主题和高 DPI 屏 -
"phase":亮度周期变化,视觉上“不动”,但底层仍是动画,某些远程桌面或缩放场景下会微动 -
"wide":加粗竖线,但受"wide_caret": true控制;若同时开了"wide_caret": true,"solid"会退化回竖线并恢复闪烁 -
"block":名字像块,实际仍走闪烁逻辑,且在 ST4 build 4160+ 中易错位,尤其 JSON 里嵌套多层{}时 -
"underline":仅画基线,在 Fira Code 或小字号 JSON 里几乎看不见,不推荐
最稳的组合就一个:"solid" + 三零参数。其他任何“看起来不闪”的配置,在 4K 屏、远程桌面、Retina 外接屏或某些主题下,大概率会暴露像素级抖动——那不是 bug,是 Sublime 渲染引擎对非零 caret_extra_* 的强制重绘校验行为。


















