Sublime Text原生支持Insert Enumerated Lines生成1.、2.式编号,但无法设起始值或步长;需用Increment Selection插件列选后手动输入起始数(如1001)实现自定义序列,再配合正则替换添加前缀、零填充等格式。

用 Ctrl+Shift+P 调出命令面板后搜 Insert Enumerated Lines
Sublime Text 自带这个功能,但默认没绑定快捷键,也藏得深——它不叫“插入递增数字”,也不在编辑菜单里直接显示。你必须打开命令面板(Windows/Linux 是 Ctrl+Shift+P,macOS 是 Cmd+Shift+P),输入关键词 Insert Enumerated Lines 才能触发。
它会从光标所在行开始,对每一行插入一个递增数字,格式为 1. 、2. 这类带点的编号;如果你只需要纯数字(比如模拟主键 1001、1002),就得配合后续步骤调整。
- 选中 N 行空白行再执行,就能生成 N 个连续编号;不选中则从当前光标行向下逐行插入(包括已有内容的行,慎用)
- 起始数字固定为 1,不能直接设起始值或步长——这是最常被卡住的地方
- 插入后所有数字都是普通文本,不带语法高亮,不影响后续编辑
想从 1001 开始、步长为 1?用 Column Selection + Increment Selection 插件
原生功能不够用时,Increment Selection 是最轻量、最稳的选择。它不改 Sublime 核心逻辑,只在列选区上做递增,完全可控。
安装后,先用 Ctrl+Alt+↑/↓(或鼠标拖拽时按住 Ctrl+Alt)竖向选中一列空白位置(比如 10 行开头),松开后输入起始数字(如 1001),再按 Ctrl+Shift+P → 输入 Increment Selection 回车——它会自动按行递增,生成 1001、1002…
- 必须是「列选择」(即多行同一列的矩形区域),普通行选或全选无效
- 起始值由你手动输入决定,步长默认为 1,可在命令面板里输入
Increment Selection: Set Step修改 - 如果列里已有字符(比如前面有
ID:),插件会把数字追加到末尾,不是覆盖——要覆盖就得先清空那列
批量生成带前缀/后缀的 ID,比如 user_0001、user_0002,用正则 + Find in Files 配合 $1 引用
当你要的不是纯数字,而是带固定前缀、零填充、甚至带分隔符的序列(如 log-20240501-001),原生替换就比插件更灵活。
先用列选中一列空白,填入任意占位符(比如全输 0),然后打开替换面板(Ctrl+H),勾选 Regular Expression,查找框填 0,替换框填 user_$1 ——这当然不行,因为 $1 没有捕获组。正确做法是:先用 Ctrl+Shift+F 在当前文件「Find in Files」里搜 ^$(空行),替换为 user_0001,再手动选中所有刚生成的 0001,用 Increment Selection 处理——这样前缀就锁死了。
- 零填充不能靠
Increment Selection自动生成,得自己写好0001再递增,否则会变成1、2、3 - 如果行数超 1000,手敲
0001太累,可先用 Python 生成一行脚本:print('\n'.join([f'user_{i:04d}' for i in range(1, 101)])),复制结果进 Sublime 再粘贴 - 别依赖「全部替换」自动生成序列——正则本身不带状态,无法让每行的替换结果依赖上一行
为什么不用宏录制或 Python 插件写死逻辑?
有人试过录宏,按一次 Ctrl+V 粘贴一个数,再按一次 Ctrl+↓ 移动,循环 100 次……结果发现宏无法动态更新数字,最终全是重复值。也有用户写 Python 插件调 view.insert(),但调试成本高、跨版本兼容差,且一旦出错容易卡死 Sublime。
真正高效的做法,是把「生成序列」拆成两步:先机械生成基础结构(靠列选+插件),再用查找替换做格式微调(前缀、分隔、零宽等)。这两步都可逆、可中断、不依赖外部环境。
- 列选择是 Sublime 最稳定的行为,哪怕文件有百万行,选 1000 行列也秒响应
-
Increment Selection插件源码不到 50 行,无网络请求、无配置文件、不写 registry,关掉插件后原有文本也不受影响 - 所有操作都不修改文件编码或换行符,避免测试数据因格式错乱导致解析失败
复杂需求往往败在试图一步到位。先让数字动起来,再让它长得像你要的样子——中间那层「手动补零」或「多按一次替换」,不是倒退,是留出纠错余地。


















