使用方法
- 文本框里默认放着 6 行示例文本,其中第 3 行是空行,打开页面就能看到编号结果;把这段内容替换成你自己的文本即可。
- 「起始编号」默认 1,允许填 0;「步长」默认 1,改成 2 会得到 1、3、5 这样的隔号序列。
- 「分隔符」默认 ". ";改成 ": " 得到冒号风格,改成 ") " 得到 Markdown 有序列表,改成 "." 得到纯编号。
- 「对齐方式」默认右对齐,短编号左侧补空格补到与最大编号同宽;改成左对齐则不补空格。
- 「跳过空行」默认不勾选,空行照常编号;勾选后空行既不编号也不递增,后面的行号会往前顶。
- 在文本框里按 Ctrl 加回车开始编号(Mac 上用 Cmd 加回车),回车留给换行;在三个输入框里按回车也能触发。
- 结果区下方是逐行明细表,默认展开 6 行,行数多时点「加载更多」看全表;「复制结果」复制整段文本,「下载 .txt」存成文件,「导出 CSV」带字节序标记。
这个文本添加行号工具能解决什么问题
本页解决的是「把一段纯文本变成可以逐行指认的文本」。日志片段、歌词、会议纪要、合同条款、代码摘录,一旦需要别人说出第几行有问题,就得先有行号。手工敲行号的代价不只是时间:中途插入或删掉一行,后面全部要重敲,极易漏号、重号。
另一类需求是编号本身要参与排版。写 Markdown 有序列表时每行前面要数字加右括号;整理歌词或剧本时编号要右对齐让正文左边缘齐平;做代码评审记录时编号得与原文行号严格对应,不允许因空行错位。本页用起始编号、步长、分隔符、对齐与跳过空行五个控件分别覆盖。
它和站内其他文本工具走向不同:「给每行添加前后缀」加的是固定字串,编号不会递增;「按字母排序行」改变行的顺序而不加前缀;「删除空行」与「删除重复行」在收缩行数;「行统计」只回答有多少行多少字符。本页不改动行的顺序与内容,只在行首追加编号。
这个工具在本站也叫添加行数字转文本。名字里的「转」来自英文介词的直译,实际做的是给文本加行号,不是把数字转成文本。
计算原理与变量说明
行号这件事看着只是「每行前面加个数字」,真正决定结果的是四个变量:哪些行参与编号、编号怎么递增、编号占多宽、编号与原文之间塞什么。下面逐个说明。
第一步,切行与归一。文本先按 \n 切行,\r\n 与单独的 \r 在切行前统一归一成 \n。三种换行混排时,归一能避免多切出空行——多切出的空行会被当成真实空行参与编号,行号立刻全错。
第二步,判定空行。判定只看长度:去掉 \r 后长度为 0 才算空行。只含空格或制表符的行长度不为 0,会被当成有内容照常编号。从代码块或网页复制的空行常带缩进,就落进这一类;要跳过它们得先清掉空白。
第三步,编号序列。第 k 个参与编号的行拿到 nk = 起始 + (k − 1) × 步长,k 只数参与编号的行,不数被跳过的空行。默认起始 1、步长 1,六行文本得到 1 到 6;起始 10、步长 5 得到 10、15、20、25、30、35。k 不等于文本行序,一旦跳过空行,行号会往前顶。
第四步,宽度与补空格。宽度 w 取最大编号写成十进制后的位数,是字符串长度而不是数值大小。默认 1 到 6,w 等于 1;起始 1、步长 2 时末号排到 11,w 变 2;起始 100 时编号从 100 到 105,w 变 3。右对齐把短编号左侧补空格补到 w 位,左对齐不补。输出行等于编号加分隔符加原行内容,三者直接拼接。
为什么「跳过空行」必须明确口径。这个开关有两种做法。一种是空行既不编号也不递增(本页默认):后续行号保持连续,六行文本里第 3 行空着,第 4 行拿到 3。另一种是空行保留编号但不加内容,行号与原文行号一一对应,第 4 行拿到 4。前者适合念出来要连号的场景,比如会议纪要、歌词;后者适合按行号回指原文的场景,比如代码评审。选错口径,行号全乱。
为什么右对齐在非等宽字体里会失效。补空格是为了让分隔符落在同一列。等宽字体里一个空格与一个数字同宽,补几位就对齐几位;比例字体里空格通常比数字窄,编号位数一多反而越歪。粘进 Word 或演示文稿用左对齐更稳,贴在代码块、终端里右对齐更好看。
为什么分隔符是任意字符串。分隔符不做校验,填什么就原样拼在编号与原文之间。填 ". " 得到编号点;填 "." 得到纯编号;填 ") " 得到 Markdown 有序列表;填 ": " 得到冒号风格。填错了没有任何提示。
完整示例(数值仅作演示)
示例文本共 6 行,第 3 行为空:依次是「第一行 first line」「第二行 second line」、空行、「第四行 with spaces」「第五行 5」「第六行 end」。下面四组参数都由页面自己的算法复算,可照着核对。
默认参数(起始 1、步长 1、分隔符 ". "、右对齐、不跳过空行):编号依次为 1 到 6,宽度 1,输出首行「1. 第一行 first line」,末行「6. 第六行 end」,中间第 3 行是「3. 」,编号后跟着空内容。
勾选「跳过空行」:第 3 行不编号也不递增,输出里它仍是空行,第 4 行变成「3. 第四行 with spaces」,末行变成「5. 第六行 end」。参与编号的行降到 5 行,但输出行数仍是 6 行。
起始 10、步长 5、分隔符 ": ":编号依次为 10、15、20、25、30、35,宽度 2,输出首行「10: 第一行 first line」,末行「35: 第六行 end」。
起始 100、步长 1:编号从 100 排到 105,宽度变 3,输出首行「100. 第一行 first line」,末行「105. 第六行 end」。这一组最大编号本身就是 3 位,右对齐补不出空格,看上去与左对齐一致。
起始编号与步长对照表
下表固定用示例的 6 行文本,只改起始编号与步长,分隔符 ". "、右对齐、不跳过空行。首行与末行即该组第一号与最后一号的实际输出。
| 起始 | 步长 | 首行输出 | 末行输出 | 编号宽度 |
|---|---|---|---|---|
| 1 | 1 | 1. 第一行 first line | 6. 第六行 end | 1 |
| 0 | 1 | 0. 第一行 first line | 5. 第六行 end | 1 |
| 1 | 2 | 1. 第一行 first line | 11. 第六行 end | 2 |
| 10 | 5 | 10. 第一行 first line | 35. 第六行 end | 2 |
| 100 | 1 | 100. 第一行 first line | 105. 第六行 end | 3 |
| 1 | 10 | 1. 第一行 first line | 51. 第六行 end | 2 |
读这张表要看宽度那一列怎么跳。起始 0 与起始 1 的编号都在个位,宽度 1,右对齐补不出空格;起始 1 配步长 2 时末号涨到 11,宽度变 2,首行的 1 前面多出一个空格,写成「 1.」——这个前导空格来自宽度差,不是分隔符的一部分。起始 100 让宽度变成 3,前导空格又消失。
起始 10 配步长 5 与起始 1 配步长 10 的末号分别是 35 与 51,宽度都是 2,递增密度却差很多。步长越大,同样行数下编号跨度越长;行数多时压小步长更能控制宽度。
结果边界、舍入与适用说明
- 文本为空时提示「请先粘贴或输入要编号的文本」,只含空白字符也按空处理,不会拿上一次结果冒充本次输出。
- 起始编号范围 0 到 999999,允许从 0 开始;小于 0 提示「起始编号不能为负」,大于 999999 提示超出范围。
- 步长范围 1 到 100;小于 1 提示「步长至少为 1」,大于 100 提示超出范围。
- 编号最大值超过 999999 时提示「编号超出 999999,请调小起始值或步长」。限制来自宽度:编号越长,补出的空格越多,编号列会吃掉正文空间。
- 分隔符不做校验,空字符串也是合法输入,此时编号紧贴原文。
- 右对齐补的是半角空格,只在等宽字体下保证分隔符列对齐;两种方式输出的行长度不同,粘进表格前先确认字体。
- 被跳过的空行原样保留,输出行数始终等于输入行数,少的只是编号个数。
- 编号一律按十进制输出,不补零、不加前导符号;页面不联网、不写本地存储。
常见问题
勾选「跳过空行」后,为什么后面的行号整体变小了?
因为本页的跳过口径是不编号也不递增:空行不占编号序列的位置,后面的行会顶上来。示例里第 3 行是空行,勾选后第 4 行拿到 3 而不是 4。要行号与原文行号严格对应就别勾选,空行照常编号,只是编号后面没有内容。
为什么只含空格的行还是被编上了号?
空行判定只认长度:去掉回车符后长度为 0 才算空行,含空格或制表符的行属于有内容的行。从代码块或网页复制的空行常带缩进,就落进这一类;想让它们也被跳过,先清掉多余空白。
右对齐补的空格,粘到 Word 里为什么还是歪的?
补空格让分隔符对齐的前提是等宽字体:一个空格与一个数字同宽,补几位就对齐几位。比例字体里空格通常比数字窄,编号位数越多反而越歪。粘进 Word 或演示文稿改用左对齐更稳;贴在代码块、终端里右对齐更好看。
怎么一口气得到 Markdown 有序列表?
把分隔符填成 ") ",输出就变成「1) 第一行」这样的形态,粘进支持 Markdown 的编辑器会自动渲染成有序列表。只要编号不要分隔符就填 "."。
起始编号能不能从 0 开始?
能。起始编号允许填 0,示例文本下首行是「0. 第一行 first line」,末行是「5. 第六行 end」。习惯从 0 计数时这样更顺手;给普通人看的文档一般还是从 1 开始。上限 999999,不支持负数。
文本里混着不同系统的换行符,会多出空行吗?
不会。切行之前会先把 \r\n 与单独的 \r 统一归一成 \n 再切分,三种换行混排也不会被切成两段。归一后长度为 0 的行才算空行,只有缩进或空格的行仍会被当作有内容的行照常编号。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。