alt+鼠标拖选列编辑最稳,关闭自动换行后按住alt纵向选中前n列直接删除,避免正则误删、乱码及跨行问题。

用 Alt + 鼠标拖选做列编辑最稳
Notepad++ 删除每行前 N 个字符,本质是「列模式删除」,不是正则能优雅解决的场景。正则容易误吞换行符或跨行匹配,而列编辑直接、可控、所见即所得。
- 按住
Alt键不放 - 鼠标移到第一行要删的起始列(比如第 1 列),左键按下并向下拖到最后一行对应列
- 松手后形成纵向选区,按
Delete或Backspace即可 - 如果要删前 5 个字符,就从第 1 列拖到第 5 列;删前 20 个,就拖到第 20 列
注意:必须关闭「自动换行」(View → Word wrap 不勾选),否则拖选会错位;行尾不足 N 字符的行,会被删到行尾为止,不会报错。
用正则删首部固定长度内容风险高
有人试过 ^.{N} 替换为空,看似合理,但实际问题一堆:空行、缩进不齐、制表符 \t 算 1 个还是多个字符、UTF-8 多字节字符被截断……尤其当文件混用空格和 \t 缩进时,. 匹配行为不可控。
-
^.{3}在含中文或 emoji 的行里可能只删掉 1 个汉字的前 3 字节,造成乱码 -
^[\s]{3}想删前 3 个空白,但\s在 Notepad++ 正则中不包含\uFEFF(BOM),也不区分\t宽度 - 如果某行只有 2 个字符,
^.{3}就完全不匹配,删不掉——你得额外补一条^.{1,2}$,逻辑立刻变复杂
除非 N=1 且全英文纯 ASCII,否则别碰这个方案。
删前 N 个字符 + 保留对齐,得靠宏或 Python 脚本
真有批量处理需求(比如日志里统一去掉时间戳前 23 个字符),又不想手动拖选,就得跳出 GUI 思维:
- 安装
Python Script插件(Plugins → Plugins Admin → 勾选 Python Script) - 运行脚本:
editor.forEachLine(lambda line, i: editor.replaceWholeLine(i, editor.getLine(i)[23:]))
(把23换成你要删的位数) - 或者导出为 .txt,用命令行:
cut -c24- input.txt > output.txt(Linux/macOS)或 PowerShell:Get-Content input.txt | ForEach-Object { $_.Substring(23) } > output.txt
这类操作不依赖 Notepad++ 渲染逻辑,字符计数准确,支持 Unicode,也避开了 GUI 下大文件卡顿问题。
快捷键 Ctrl+Shift+K 只删整行,不适用首部删减
Ctrl+Shift+K 是删当前行(含换行符),光标在哪行就删哪行。它和「删前几个字符」完全无关,误搜到这个快捷键会白忙活。
- 想删第 1–100 行?先
Ctrl+G跳到第 1 行,Shift+↓选 100 行,再Delete - 想删每行开头的
//注释?用正则^//\s?更合适,而不是列编辑或快捷键
真正容易被忽略的是:列编辑时若松开 Alt 再按 Delete,选区就没了——必须按住 Alt 拖完,再直接按 Delete,中间不能松手也不能点其他地方。











