Sublime Text 保存大容量 JSON 文件慢的根源是同步语法校验、插件钩子、LSP 诊断和自动格式化;禁用 save_on_focus_lost、atomic_save 和 detect_indentation 三项配置可将延迟从秒级降至毫秒级。

Sublime Text 保存大容量 JSON 文件慢,核心不是磁盘写入速度,而是它在保存前同步执行语法校验、插件钩子(如 GitGutter 状态轮询)、LSP 诊断和自动格式化——哪怕你没装 Prettier,json 语法自带的解析器也会对整文件做一次 tokenization。关掉这四类同步行为,保存延迟可从秒级降到毫秒级。
为什么 save_on_focus_lost + 大 JSON = 光标卡住
这个设置看似“贴心”,实则最危险:窗口失焦瞬间触发保存,但 Sublime 不排队、不降级,直接阻塞主线程。而大 JSON 文件会让以下操作全卡住:
-
GitGutter调用git status检查修改状态(尤其在含.git的目录下) -
LSP-json插件默认在保存时触发完整诊断,解析整棵树 -
detect_indentation开启时,会从头扫描到尾猜缩进,对无缩进的 minified JSON 是纯浪费 - 若启用了
auto_indent或trim_trailing_white_space_on_save,会遍历全部行做字符串操作
必须改的三项配置(用户设置)
打开 Preferences → Settings – User,粘贴或修改以下内容。注意:不要只加一两项,这三者必须共存才有效:
-
"save_on_focus_lost": false—— 彻底禁用失焦保存,改用手动Ctrl+S -
"atomic_save": false—— 跳过“写临时文件 + 原子替换”流程,避免双倍 I/O -
"detect_indentation": false—— 对 JSON 日志、dump 数据等无缩进文件,省掉全文件扫描
顺手加上:"trim_trailing_white_space_on_save": false 和 "ensure_newline_on_save": false,避免保存时额外遍历。
JSON 文件专属优化(语法级设置)
全局关设置会影响日常开发,更稳妥的是按语法类型单独配置。打开一个大 JSON 文件(如 data.json),确认右下角显示为 JSON,然后执行 Preferences → Settings – Syntax Specific,在弹出的 JSON.sublime-settings 中写入:
{
"syntax": "Packages/JavaScript/JSON.tmLanguage",
"line_numbers": false,
"gutter": false,
"highlight_line": false,
"draw_white_space": "none"
}
重点:syntax 必须设为官方 JSON 语法(不是 Plain Text),否则 LSP 功能失效;但关掉渲染项后,语法高亮本身不拖慢保存——真正卡住的是保存前的校验与插件响应。
插件层面的硬性隔离
很多插件根本不识别“大文件”概念,一加载就扫全文。对 JSON 场景,优先处理这些:
-
GitGutter:进Preferences → Package Settings → GitGutter → Settings – User,写{"non_blocking": true},禁用同步轮询 -
LSP-json:在 LSP 设置中加"diagnostics_delay_ms": 2000(别设为 0,否则保存即触发) -
SublimeLinter:确保"lint_mode": "save",且在 JSON 设置里加"disable": ["json"],避免重复 lint - 绝对不要启用
AutoSave插件——它和save_on_focus_lost共存会导致两次保存,I/O 直接翻倍
已打开的大 JSON 文件若正在卡顿,按 Ctrl+Shift+P 输入 Set Syntax: JSON 强制重载语法,可中断部分插件的初始化流程。
最容易被忽略的一点:即使你清了所有设置,只要 sublime_text.exe 进程没彻底退出,旧的 LSP session 或 GitGutter 缓存线程仍在后台跑。保存卡顿反复出现时,先在任务管理器里杀掉所有 sublime_text.exe 实例,再重启编辑器。


















