列选择后填递增数字需三步:先ctrl+alt+↑/↓或鼠标拖拽创建矩形列选区,再手动输入起始值(如1001),最后ctrl+shift+p执行increment selection,即可按步长1逐行递增;该命令仅响应矩形列选,不依赖光标,不跳过空行,且保留输入位数(如输0001则得0001、0002)。

列选择后怎么用 Increment Selection 填递增数字
列选择(矩形选区)是 Sublime 中唯一能严格对齐某列并逐行递增的原生方案,Increment Selection 就是专为它设计的命令。它不依赖光标位置是否在行首,也不跳过空行或缩进,只要列选区完整,就能按顺序填数。
操作链必须是:先列选 → 再手动输入起始值 → 最后执行 Increment Selection。漏掉“手动输起始值”这步,它会默认从 1 开始,但你可能需要从 1001 或 -5 开始。
- 列选方式只有两种有效:
Ctrl+Alt+↑/↓(逐行扩展列选)或Ctrl+Alt+鼠标拖拽(手动框选矩形);普通鼠标拖选、Ctrl+Shift+L都不行 - 列选完成后,直接敲数字(如
1001),所有选中位置都会被覆写成这个值 - 再按
Ctrl+Shift+P→ 输入Increment Selection→ 回车,它会从你刚输的值开始,按步长 1 依次递增 - 想改步长?得提前改源码或用插件;原生命令固定步长为 1,不支持输入框配置
为什么不能直接用 Insert Numbers 或 InsertNums 做列内递增
Insert Numbers 和 InsertNums: Insert Numbers 都只响应「光标位置」,不是「列选区」。它们把每一行当作独立插入点,无法感知列对齐关系——哪怕你列选了第 5 列的 10 个位置,执行后数字还是会插在光标当前列,而不是你选中的那一列。
更关键的是:这两个命令都要求光标已存在(即多光标已布好),而列选本身不生成光标,只生成一个矩形选区。Sublime 把这两类编辑模式完全隔离,混用会静默失败。
-
Insert Numbers在列选状态下执行,只会插一个数(通常是 0),且插在第一行第一个光标处,其余列选位置不动 -
InsertNums同样退化:若没提前布光标,它只在当前行插一个数;若你用Ctrl+Shift+L拆行再列选,它仍按行序填,而非列序,结果错位 - 正则替换也救不了:^ 匹配行首,\K 不支持列偏移,没法限定“只匹配第 5 列的内容”
补零、带前缀、非连续步长怎么搞
Increment Selection 只负责递增,不处理格式。要出 0001、user_101 或步长为 3 的序列,得拆成两步走,且顺序不能错。
- 补零:列选数字列 → 全输
0001→ 执行Increment Selection→ 得到0001、0002、0003(它保留你输的位数,不会自动截断) - 加前缀:先列选目标列左侧空白处 → 输入
user_→ 再列选紧邻右侧的数字列 → 输起始值 →Increment Selection - 非 1 步长:原生命令做不到;必须换插件,比如
Text Pastry支持tp-num 100 105 5(从 100 开始,每次加 5),但它不走列选路径,而是靠多光标
容易忽略的兼容性细节
Sublime Text 4 的 Increment Selection 行为和旧版不同:它现在会严格保持列选宽度,哪怕某行该列位置是空格或制表符,也会覆盖写入;但如果你列选跨了缩进和内容混合区(比如第 1 行缩进 2 空格、第 2 行缩进 4 空格),它仍按矩形坐标填,可能导致数字插进缩进里而非内容开头。
- 空行会被正常处理:列选包含空行时,它会在空行对应列位置插入数字,不会跳过
- Tab 字符会让列坐标偏移:一个 Tab 在不同设置下可能等于 2/4/8 列,列选时看到的“对齐”未必是真实字节偏移,建议先
View → Indentation → Convert Indentation to Spaces - Mac 用户注意快捷键是
Cmd+Ctrl+↑/↓,不是Ctrl+Alt;输错组合键会导致列选失败,看起来像功能失灵











