用正则删每行前n个字符需用^.{n},但须启用.*模式、注意tab计为1字符、排查bom干扰;对python/yaml等缩进敏感格式,应先统一缩进再操作,避免indentationerror。

用正则精准删每行前N个字符(含空格/Tab)
要批量删每行开头固定长度的前缀(比如前12个字符),不能靠鼠标选或快捷键硬删,必须用正则锚定列位置。关键不是“删多少”,而是“从哪开始删”——^强制从物理行首算起,.{N}匹配恰好N个任意字符(包括空格、Tab、字母、符号),全部捕获后替换为空即可。
常见错误现象:^.{12}没生效,或者删多了/删少了。原因通常是:没点右下角的.*启用正则模式;把Tab当成了4个空格(实际Tab在正则里只算1个字符,得显式写\t才能准确计数);或者文件有BOM头,导致第一行的^锚定偏移。
- 删每行前12个字符:查找框填
^.{12},替换框留空,勾选.* - 若前缀含Tab且需精确控制(比如前11个字符含1个Tab),改用
^.{10}\t.{1},避免.误匹配换行符 - 执行前务必先点
Find All,确认匹配行数和高亮位置是否符合预期——尤其注意第一行是否被BOM干扰
删前缀但保留缩进结构(防Python/YAML崩)
直接^.{N}会无差别擦除,对Python代码或YAML这类依赖缩进的格式极危险。比如删掉4个字符,可能把4空格缩进删成2空格+Tab,后续报IndentationError。真正安全的做法是先识别缩进本质,再决定删不删。
使用场景:清理日志前缀(如[INFO] )、删除CSV导出的行号列、剥离调试打印的固定头部。这些内容通常不参与语法缩进,可放心删;但若前缀混在缩进里(比如某几行是 def foo():,前4位是缩进),就得绕开。
- 先按
Ctrl+Shift+P输入Show Scope,看光标所在行的语法scope是不是source.python或source.yaml - 如果是,改用
View → Indentation → Convert Indentation to Spaces统一缩进,再手动删前缀 - 或者用更保守的正则:
^[ \t]{N}(只删N个空白),避免误伤非空白前缀
多光标删前缀:适合小范围、非规律前缀
当“前缀长度不固定”但“位置可人工判断”时(比如每行开头都有【xxx】,但xxx字数不同),正则反而麻烦。这时用多光标+方向键更直观,也更容易中途叫停。
核心逻辑是:让每个光标独立停在待删区域起点,而不是靠规则批量匹配。它不追求全自动,但容错率高,删错也能立刻Ctrl+Z回退。
- 先用
Ctrl+F搜【,勾选Whole Word,点Find All - 按
Ctrl+Shift+L把所有匹配项转为多光标 - 按
Shift+→选中从【开始的若干字符(比如按3次选中【xxx】),再按Delete - 如果某些行前缀更长,可先
Ctrl+→跳词,再Shift+→微调选区
删完发现缩进错乱?优先检查Tab/空格混用
删前缀后代码折叠异常、对齐线断开、语法高亮丢失——90%是因为原文件同时存在Tab和空格,而^.{N}把Tab当1个字符删了,空格当1个删了,结果缩进列数彻底乱套。这不是正则写错了,是编辑前没做缩进归一化。
Sublime的视觉缩进(右下角显示的“Tab Width: 4”)和实际字符序列是两回事。你看到的“对齐”,可能是Tab撑出来的假象。
- 删前先执行
View → Indentation → Convert Indentation to Spaces - 再确认右下角状态栏是否显示
Spaces: 4(不是Tab Width: 4) - 删完若仍有问题,打开命令面板输
Convert Indentation to Tabs切回去试试——有时原始缩进本就是Tab,强行转空格反而错











