Sublime Text 可用正则批量替换双引号为单引号:Find What 填 "((?:1|\.)*?)",Replace With 填 '$1',能正确处理转义引号;需注意语言差异(如 Python 三重引号、JSON key 必须双引号),建议限定语法上下文并人工抽检嵌套场景。"\ ↩

用 Find & Replace 配合正则批量替换双引号
Sublime Text 本身不提供“引号类型转换”专用功能,但靠内置的正则替换就能干净完成。关键不是找插件,而是写对 Find What 和 Replace With。
常见错误是直接搜 " 全局替换为 ',结果把字符串外的引号(比如 JSON key、HTML 属性)甚至注释里的引号也一并换了,导致语法崩坏。
- 先按
Ctrl+H(Windows/Linux)或Cmd+H(macOS)打开替换面板 - 勾选右上角
.*按钮启用正则模式 -
Find What填:"([^"\\]|\\.)*"—— 匹配最简双引号字符串(不跨行、不含未转义换行) -
Replace With填:'$1'—— 把捕获的内容用单引号包起来 - 点
Replace All,仅作用于字符串内部的双引号
处理带转义符的双引号(如 "He said \"Hi\"")
上面的正则会漏掉含 \" 的字符串。要覆盖这类情况,得升级正则逻辑,否则替换后变成 'He said "Hi"',中间的 " 没变,反而破坏了字符串结构。
更鲁棒的写法是匹配整个字符串字面量,包括转义序列:
Find What: "((?:[^"\\\\]|\\\\.)*?)"
Replace With: '$1'
说明:(?:[^"\\\\]|\\\\.)*? 表示“非引号且非反斜杠的字符,或一个反斜杠加任意字符”,惰性匹配到下一个 "。这样 \" 被整体跳过,不会被误当分隔符。
为什么不用 Convert Quotes 插件?
确实有叫 Convert Quotes 或 SwapQuotes 的第三方插件,但它们多数只做光标所在词的切换,不支持跨文件/大范围上下文感知替换。真正批量处理时,插件往往:
- 无法区分字符串和普通文本(比如把
console.log("x")里的函数名log当成字符串换掉) - 不识别语言语法(在 Python 中
f"{x}"是 f-string,在 JS 中是模板字面量,插件通常一视同仁) - 更新滞后,Sublime 4 的 API 变动后部分插件失效
手动写正则虽然多敲几下,但每一步都可控,出错也能立刻回退 Ctrl+Z。
Python/JS 等语言中需额外注意的边界
不同语言对引号语义不同,硬替换可能引入 bug:
- Python:三重双引号
"""docstring"""必须保持一致,不能拆成'''docstring'''—— 虽然语法允许,但团队规范常禁止混用 - JavaScript:模板字面量用的是反引号
`,不是单/双引号,"${x}"是字符串拼接,`${x}`是模板,别误伤 - JSON:key 必须用双引号,
{"name": "Alice"}换成单引号就非法了
所以执行前务必确认当前文件类型(看右下角语法标识),必要时加限定条件,比如只在 source.python 作用域内操作,或先用 Ctrl+Shift+P → Set Syntax: Python 锁定上下文。
最麻烦的其实是嵌套引号场景,比如 SQL 字符串里再包 SQL 字符串,这种靠正则很难 100% 安全,得人工抽检几处关键位置。










