最稳的批量加引号方式是正则替换:用^$(.+)$为非空行加双引号;用("?)(a-zA-Z_)("?)\s:统一JSON key引号;用\b(a-zA-Z_*)\b精准包裹变量名。

最稳的批量加引号方式不是靠快捷键或插件,而是用正则替换——它不挑缩进、跳过空行、自动适配换行符,且能精准控制是否包含已有引号。
用 ^$(.+)$ 给非空行加双引号
这是处理 JSON 数组元素、CSV 字段、SQL IN 列表的标准写法。匹配逻辑是:行首 + 至少一个非换行字符 + 行尾,.+ 天然跳过空行,$ 在 Sublime 默认行为下只认 \n(不跨行),所以不会误吞下一行。
-
Find What:^(.+)$ -
Replace With:"$1" - 务必勾选左下角
.*(Regular Expression)按钮 - 若原始文本含
\r\n(Windows 换行),先执行Ctrl+Shift+P→Set Line Endings: Unix,否则部分行可能漏匹配
给 JSON key 清理并统一加双引号:("?)([a-zA-Z_][a-zA-Z0-9_]*)("?)\s*:
这个正则专治 id:、"name":、'email': 混用场景,目标是输出标准的 "id":。关键在捕获组设计: 是纯标识符, 和 是可选旧引号,直接丢弃。
-
Find What:("?)([a-zA-Z_][a-zA-Z0-9_]*)("?)\s*: -
Replace With:"$2": - 冒号后必须跟
\s*:,不能写成:\s*,否则会把值也卷进来 - 不支持数字开头(如
1st_name)或含短横线(如user-id)的 key;真有这类字段,得换用(["']?)([^"':\s]+)(["']?)\s*:并手动校验
单引号和双引号不能混用?用 \b([a-zA-Z_][a-zA-Z0-9_]*)\b 安全包裹
当你只想给“干净的变量名”加引号(跳过已有引号、数字开头、含空格或注释的行),就得靠单词边界 \b。它比 ^/$ 更细粒度,但只适用于每行仅有一个目标词的场景。
-
Find What:\b([a-zA-Z_][a-zA-Z0-9_]*)\b -
Replace With:'$1'或"$1" - 注意:如果某行是
user_id // primary key,这个正则只会匹配user_id,而多光标会直接崩掉 - 若想排除已带引号的词,可加负向先行断言:
\b(?
多光标加引号只适合 ≤50 行且无干扰字符
按 Ctrl+Shift+L(Win/Linux)或 Cmd+Shift+L(macOS)后,你面对的不是“每行一个光标”,而是“每行一个编辑点”——它对缩进、空格、注释零容忍。一旦某行末尾有空格,End 就停在空格上," 会插错位置。
- 加左引号前,必须用
Ctrl+Home(Win)或Cmd+Home(macOS)确保光标在真正行首,按一次Home不够 - 行尾有空格?先
Ctrl+Shift+P→Trim Trailing White Space - 加完左引号后,再按
End(Win)或Cmd+→(macOS),然后输",——别用连按方向键,容易卡在空格里 - 只要出现
name, age或id // pk这类结构,立刻切回正则,多光标在此类文本中不可靠
真正容易被忽略的是换行符混合和引号嵌套:Sublime 不会自动转义原内容里的 " 或 \,比如 file"name.txt 加完变成 "file"name.txt",JSON 直接报错;另外,宏录制或列选择(Alt+拖拽)看似快,但在缩进不一致或 Markdown/YAML 场景下,结果几乎必然错位。


















