最简可靠的写法是^.,因^锁定行首、.匹配任意单字符(除换行符),不贪心、不越界,跳过空行且不误伤行中内容。

直接删每行第一个字符,用正则 ^. 替换为空最稳;但必须关掉 .* matches newline,否则会跨行吞内容,整段变空。
为什么 ^. 是最简可靠的写法
^. 中 ^ 锁定行首,. 匹配任意单个字符(除换行符外),一次命中每行开头那个字符,不贪心、不越界。比写 ^[\s\S] 或 ^[\d\D] 更轻量,也比手动列选更可控。
- 它不依赖字符类型:删的是第 1 个字,不管是字母、数字、空格、
#、"还是\t - 不匹配空行:空行没“第一个字符”,
^.自动跳过,不会额外插入空行 - 不误伤行中内容:只作用于行首位置,
foo[bar]删成oo[bar],不会碰括号里东西
删完发现某几行缩进错乱或代码报错
大概率是原文件混用了 Tab 和空格——删掉行首 Tab 后,剩余空格不足以对齐,Python 报 IndentationError、YAML 解析失败、Alignment 插件失效都由此引发。
- 先统一缩进:菜单 View → Indentation → Convert Indentation to Spaces,再删
- 禁用自动检测:同路径下关掉 Detect Indentation,避免下次打开又切回 Tab
- 如果必须保留 Tab 缩进,改用
^\t单独删行首 Tab,^(空格)单独删行首空格,分两步更安全
想删行首多个固定字符(比如前两个)怎么办
不能靠多光标逐个删,效率低还易漏;也不能用 ^.. 硬匹配——万一某行只有 1 个字符,^.. 就不匹配,导致漏删。
- 稳妥做法:用
^.{1,2},表示“匹配行首 1 个或 2 个字符”,覆盖长短不一的场景 - 若明确只要删前两个,且允许短行留原样,就用
^..,但务必先 点 Find All 看右下角匹配数,确认没漏行 - 别开
Match Whole Word:它会让^.失效,因为单字符很少构成“完整单词”
删完有残留或多了空行?检查这三个设置
Sublime 的替换行为高度依赖面板开关状态,90% 的“删不对”都出在这里:
- 右下角
.*必须点亮——否则^.当纯文本处理,完全不生效 - 右下角
\n(. matches newline)必须关闭——一勾上,.就能吞掉换行符,^.可能匹配到下一行开头,整块内容塌陷 - 替换框必须留空——填
\n或空格会导致补字符,不是删除,而是“替换成换行符”,结果空行翻倍
真正容易被忽略的是:删行首字符后,语义可能已改变。比如删掉 CSV 每行开头的 ",但某些字段本身含逗号,后续解析仍会出错;删掉日志每行的 [INFO] 前缀,但时间戳格式未对齐,grep 就失准。正则只管字符,不管上下文——这一步得人来把关。











