^在sublime中能精准匹配每行开头(含空行),启用正则模式后直接替换即可批量加前缀;若需跳过空行或注释行,须用^(?!\s*$)或^(?!//|#)等负向先行断言。

Sublime 中正则替换每行开头:用 ^ 匹配行首
直接说结论:^ 在 Sublime 的「Find」中能精准匹配每行开头(包括空行),配合「Replace All」就能批量加前缀。别用 \A 或 \Z,它们只匹配整个文本的开头/结尾,不是每行。
操作时确保启用了「Regular Expression」开关(右下角图标或 Ctrl+Alt+R),否则 ^ 会被当字面量处理。
- 如果文件有 Windows(
\r\n)和 Unix(\n)混用的换行符,^依然有效——Sublime 的正则引擎默认按行分割处理 - 空行也会被匹配,所以如果你不希望给空行加前缀,得加负向先行断言:
^(?!\s*$)(意思是“行首,且后面不是纯空白直到行尾”) - 中文路径或含特殊字符的文本无需转义
^,它本身不是特殊字符,只在正则上下文中有含义
替换内容里怎么引用原行内容?用 $0 或 $1
想在每行前面加 [TODO],后面保留原内容,替换框填:[TODO]$0。这里 $0 表示整个匹配到的内容(即行首位置),等价于空字符串,但语义清晰;更常见的是直接写 [TODO],因为 ^ 本身不消耗字符。
但如果你用了捕获组,比如 ^(.*$),那就要用 来还原原行:[TODO]。不过没必要多此一举——^ 单独用最轻量、最可靠。
-
$0是完整匹配,$1是第一个捕获组,Sublime 不支持$&这种写法 - 别写
[TODO]\n试图换行,这会把原换行符吃掉,导致所有行连成一行;^替换天然保持原有换行结构 - 如果某行是缩进开头(如四个空格),
^仍匹配最左端,前缀会加在缩进之前,符合多数场景预期
遇到中文乱码或正则不生效?检查编码和换行符显示
如果替换后出现问号、方块或根本没反应,大概率是文件编码不是 UTF-8 无 BOM。Sublime 对非 UTF-8 编码的正则支持不稳定,尤其是含中文的替换内容。
打开「File → Reopen with Encoding → UTF-8」强制重载,再试。同时打开「View → Show Console」,执行 view.encoding() 确认当前编码。
- 开启「View → Show Whitespaces」能看清行尾是否有隐藏的
\r,避免误判换行格式 - 如果用了
^却只替换了第一行,说明「Regular Expression」没打开,或者误开了「Whole Word」或「Case Sensitive」干扰了匹配逻辑 - 大文件(>10MB)上正则替换可能卡顿,建议先用「Find All」看匹配行数是否合理,避免误操作扩散
想跳过注释行或特定开头的行?用否定字符组或负向先行断言
例如跳过以 // 或 # 开头的行,查找框填:^(?!//|#).*,替换为:[FIX]$0。注意这里必须用 .* 显式匹配整行,否则只改行首位置,看起来像没变化。
更安全的写法是:^((?!(//|#)).*)$,然后替换为:[FIX]$1,这样能确保捕获非注释行的全部内容。
- 负向先行断言
(?!...)不消耗字符,只做判断,适合“匹配但不包含”的场景 - 不要用
^[^//].*——[^//]表示“非斜杠字符”,完全不是“不以 // 开头”的意思 - Sublime 的 PCRE 引擎支持
(?!...),但不支持(? 这类负向后行断言,别踩这个坑
^ + 前缀文本,其他都是防翻车的补充。真正容易出问题的,是忘了关「Whole Word」,或者对空行是否处理没想清楚。











