最稳定无需插件的方法是用正则^匹配行首+Find All生成多光标,再调用内置“Insert Numbers”命令批量插入序号;若需跳过空行,查找式改为^(?=\S);自动化复杂场景建议用Python脚本配合re.sub动态计数。

用 ^ 匹配行首并结合替换计数实现序号插入
Sublime Text 本身不支持在替换中直接调用递增变量(比如 $1 不能自动变成 1,2,3…),但可以通过「查找→替换」+「正则匹配行首」+「手动触发多次替换」或「配合插件」绕过限制。最稳定、无需插件的方法是:先用正则选中所有行首位置,再用 Sublime 的「多光标+数字输入」技巧批量填入序号。
常见错误是直接写 ^ 却没勾选「正则表达式」开关,或者误以为 \n 能匹配当前行首——其实 ^ 才是行首锚点,且必须开启「Regular Expression」模式才生效。
- 打开「Find → Replace」(
Ctrl+H/Cmd+H) - 勾选
.*按钮(启用正则) - 查找框填:
^ - 替换框留空(先不填,等下一步)
- 点「Find All」——这时每行开头都会出现一个光标
用多光标+数字列输入快速生成连续序号
Sublime 的多光标特性可以配合「列编辑」和「数字输入」完成序号注入,比写 Python 插件或导出再处理更轻量。前提是确保所有目标行都被选中且光标精准落在行首(即 ^ 匹配的位置)。
注意:如果文件含空行,^ 仍会匹配它们,导致空行也被编号。若需跳过空行,查找式应改为:^(?=\S)(正向先行断言,只匹配非空行的行首)。
- 执行完「Find All」后,按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)调出命令面板 - 输入「Insert Numbers」并回车(这是 Sublime 内置功能,无需额外安装)
- 默认从 1 开始、步长为 1;如需从 100 开始,可在命令面板里输「Insert Numbers 100」
- 序号会从第一行光标位置开始依次填入,严格按光标顺序,不是按文件行号
用 regex + subl 命令行配合 Python 脚本做真正自动化
如果需要重复处理大量文件,或序号逻辑复杂(比如按章节分组重置、跳过注释行),靠 GUI 操作效率低且难复现。这时建议用 Sublime 的命令行工具 subl 配合外部 Python 脚本处理文本流。
关键点在于:Sublime 自身的正则替换不支持动态计数,但 Python 的 re.sub 可以传函数作为替换参数,天然支持递增逻辑。别试图在 Sublime 查找框里写 \n 或 $0 来模拟计数——它不认。
- 保存待处理文件为
input.txt - 运行脚本:
python3 -c " import re, sys cnt = [0] with open(sys.argv[1]) as f: text = f.read() result = re.sub(r'^', lambda m: str((cnt[0]:=cnt[0]+1)) + '. ', text, flags=re.M) print(result) " input.txt > output.txt -
flags=re.M是必须的,否则^只匹配整个字符串开头 - 该脚本会为每一行加「1. 」「2. 」前缀;如需纯数字(无点空格),改
str(cnt[0]) + ' '
为什么不用 \n 或 $& 在替换框里凑序号
有人试过在替换框写 1. $& 然后点「Replace All」,结果所有行都变成「1. 」——因为 $& 是匹配内容(这里是空字符串),而 Sublime 不解析数字里的自增逻辑。它把 1 当成字面量,不是变量。
另一个典型误区是认为「Find All」后按 Home 能把光标移到每行行首——实际上 Home 行为受设置影响(比如是否启用「Scroll Past End」),不可靠。必须用 ^ + 「Find All」确保光标准确落在行首位置。
真正麻烦的地方不在怎么加序号,而在于「哪些行该加」——是所有行?跳过空行?跳过以 # 开头的注释?这些判断没法靠单个正则一劳永逸,得根据实际文本结构调整匹配逻辑,而不是迷信某个万能替换式。

















