Sublime Text 的 Insert Numbers 命令必须配合多光标才有效,否则仅在首行插入一个数字;正确做法是先用 Ctrl+Shift+L(或 Cmd+Shift+L)选中多行并统一光标至行首,再执行命令。

Insert Numbers 命令必须配合多光标,否则只插一个数
Sublime Text 自带的 Insert Numbers 不是“选中多行就自动编号”,它只响应多光标位置。如果你只是用鼠标拖选中 10 行文字再执行命令,它只会往第一行光标处插一个数字(通常是 0)。
正确做法是先创建多光标:按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS)选中所有目标行,再按 Home 把光标统一移到行首;或者按住 Ctrl(Cmd)+ 鼠标左键在每行开头点一下。
- 光标列不对齐会导致数字插入位置错乱,比如有的插在缩进里、有的插在文本中间
- 如果某行已有内容且你没清空行首,新数字会紧贴着它写,可能变成
1item而非1. item - 执行后默认从 0 开始、步长为 1;想从 1 开始,得在命令面板里输
Insert Numbers: Start from 1
InsertNums 插件才是批量填 ID 的主力,参数格式很关键
InsertNums 是目前最稳的第三方方案,但它的输入框对格式敏感:起始值和步长之间只能用空格或逗号分隔,不能混用,也不能带单位或小数。
例如你选了 5 行,想生成 1001、1003、1005……就得在弹出框里输 1001,2 或 1001 2;输成 1001, 2(逗号后多空格)或 1001.0,2 就会失败,只插一个数。
- 只输一个整数(如
42),它会把 42 填到每一行——这是设计行为,不是 bug - 支持负步长,
100 -1生成100、99、98…… - 不解析已有内容,所以务必确保目标位置干净;如果前面有
ID:,它不会覆盖,而是追加,得先删掉再操作
零填充(如 0001)必须手动打底,Increment Selection 不会补零
无论是 Insert Numbers 还是 InsertNums,都只管数值递增,不管格式。想得到 0001、0002,得先手输一个带前导零的起始值(比如 0001),再用 Increment Selection 插件列选后递增。
Increment Selection 要求严格列选:按住 Ctrl+Alt(Windows/Linux)或 Cmd+Alt(macOS)竖向拖选一列空白位,松开后输入 0001,再调命令面板运行 Increment Selection —— 它会保持位数,生成 0001、0002、0003……
- 如果列里已有字符(如
ID:),插件会在末尾追加数字,不是覆盖;要覆盖就得先清空那列 -
InsertNums和Insert Numbers都做不到这点,别指望它们自动生成零填充 - 零填充一旦开始,就不能中途改位数;比如从
0001到0009没问题,但到0010时会变成10(除非你一开始打的是0010)
正则替换做动态编号只适用于 Sublime Text 4094+,老版本会失效
想生成 [001] xxx、log-20240501-001 这类带固定前缀+零填充+递增的序列,正则替换是唯一原生方案,但依赖版本特性:${1:+1} 这种算术替换语法仅在 Sublime Text 4094 及以上生效。
典型流程是:先用 ^ 替换为 001 占位 → 全选这些 001 → 运行 Increment Selection;或者用 Find in Files 批量搜空行,替换成带编号的模板,再递增。
- 老版本(如 ST3 或早期 ST4)不支持
${n:+m},强行用会原样输出字符串 - 正则替换无法跨行计数,所以不能靠一次
re.sub实现全文件自增;必须分步、借助多光标或插件 - 如果文件超 2000 行,正则方案明显变慢,而
InsertNums几乎无延迟


















