列编辑删前N字符最稳但需关自动换行,Alt+鼠标拖选是唯一真正可控方式;正则仅在纯ASCII、每行前N位严格一致时安全,否则易乱码或漏删。

列编辑删前N个字符最稳,但必须关自动换行
Alt+鼠标拖选是唯一真正可控的方式,尤其适合固定宽度前缀(如日志时间戳、人工编号)。关键不是“能不能”,而是“怎么不翻车”:
- 先关闭
View → Word wrap,否则纵向选区会错位——这是 90% 用户第一次失败的原因 - 按住
Alt不放,从第一行要删的起始列(比如第 1 列)左键按下,垂直拖到最后一行同一列位置 - 松手后直接按
Delete或Backspace,中间不能松Alt、不能点击、不能切换窗口 - 某行不足 N 字符时,会删到行尾为止,不会报错也不会跳过——这点比正则更诚实
用正则^.{N}只在条件严格时才安全
它看似简洁,但实际只适用于:纯 ASCII、每行前 N 位 100% 是目标、无 BOM/零宽字符、无混合缩进。常见崩坏点:
-
^.{3}在含中文的行里可能只删掉 1 个汉字的前 3 字节,输出乱码 - 文件带 UTF-8 BOM(
\uFEFF)时,^可能锚定失败,首行不匹配 - 某行只有 2 个字符,
^.{3}完全不触发,结果漏删——你得额外补一条^.{1,2}$ - 混用空格和
\t时,.对制表符计为 1 个字符,但视觉宽度可能是 4 或 8,删完对不齐
删到某个字符为止,别硬数位数
当“前几个字”其实是“某个分隔符之前所有内容”时,用正则反而更准:
- 删掉每行中第一个
:之前的所有字符:^.*?(?=:)(推荐)或^.*?:+ 替换为空 - 删掉每行中首次出现的
街道之前所有内容:^.*?(街道),替换为\1保留关键字本身 - 想删
//注释前缀但保留代码行?用^//\s*,比列编辑更语义化,也避开空行干扰 - 注意:不要勾选「. 匹配换行符」,否则
.*?可能跨行吞掉下一行首字符
大文件或需复用时,别卡在 GUI 里
手动列编辑适合单次、小批量;一旦文件超 10MB 或需重复执行,立刻切命令行或脚本:
- Linux/macOS:
cut -c24-精确按字节截取,支持 UTF-8,cut -c24-表示从第 24 列开始取 - PowerShell:
Get-Content input.txt | ForEach-Object { $_.Substring(23) }(注意Substring是 0 起始索引) - Notepad++ 内置 Python 脚本:
editor.forEachLine(lambda line, i: editor.replaceWholeLine(i, editor.getLine(i)[23:])) - 这些方式不依赖渲染逻辑,字符计数准确,也绕开了 GUI 下大文件卡顿、内存溢出等问题
真正容易被忽略的是:列编辑时若松开 Alt 再按 Delete,选区就消失了——必须一气呵成;而正则方案里,^ 是否真锚定在物理行首,取决于文件编码和隐藏字符,不预览就替换,等于闭眼扫雷。


















