文本添加行号工具

按你给定的起始编号、步长与分隔符,给每一行文本前面加上编号。空行怎么算、编号要不要补空格对齐、编号与原文之间塞什么,全部由四个变量决定,页面上逐项可调,结果随改随算。

已编号 6 行 / 共 6 行 / 编号宽度 1
1. 第一行 first line 2. 第二行 second line 3. 4. 第四行 with spaces 5. 第五行 5 6. 第六行 end

默认示例:起始 1、步长 1、分隔符 ". "、右对齐、不跳过空行。编号按「起始加 k 减一乘步长」推出,宽度取最大编号的位数,示例输出与页面算法逐行一致。

使用方法

  1. 文本框里默认放着 6 行示例文本,其中第 3 行是空行,打开页面就能看到编号结果;把这段内容替换成你自己的文本即可。
  2. 「起始编号」默认 1,允许填 0;「步长」默认 1,改成 2 会得到 1、3、5 这样的隔号序列。
  3. 「分隔符」默认 ". ";改成 ": " 得到冒号风格,改成 ") " 得到 Markdown 有序列表,改成 "." 得到纯编号。
  4. 「对齐方式」默认右对齐,短编号左侧补空格补到与最大编号同宽;改成左对齐则不补空格。
  5. 「跳过空行」默认不勾选,空行照常编号;勾选后空行既不编号也不递增,后面的行号会往前顶。
  6. 在文本框里按 Ctrl 加回车开始编号(Mac 上用 Cmd 加回车),回车留给换行;在三个输入框里按回车也能触发。
  7. 结果区下方是逐行明细表,默认展开 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 行文本,只改起始编号与步长,分隔符 ". "、右对齐、不跳过空行。首行与末行即该组第一号与最后一号的实际输出。

起始步长首行输出末行输出编号宽度
111. 第一行 first line6. 第六行 end1
010. 第一行 first line5. 第六行 end1
12 1. 第一行 first line11. 第六行 end2
10510. 第一行 first line35. 第六行 end2
1001100. 第一行 first line105. 第六行 end3
110 1. 第一行 first line51. 第六行 end2

读这张表要看宽度那一列怎么跳。起始 0 与起始 1 的编号都在个位,宽度 1,右对齐补不出空格;起始 1 配步长 2 时末号涨到 11,宽度变 2,首行的 1 前面多出一个空格,写成「 1.」——这个前导空格来自宽度差,不是分隔符的一部分。起始 100 让宽度变成 3,前导空格又消失。

起始 10 配步长 5 与起始 1 配步长 10 的末号分别是 35 与 51,宽度都是 2,递增密度却差很多。步长越大,同样行数下编号跨度越长;行数多时压小步长更能控制宽度。

结果边界、舍入与适用说明

常见问题

勾选「跳过空行」后,为什么后面的行号整体变小了?

因为本页的跳过口径是不编号也不递增:空行不占编号序列的位置,后面的行会顶上来。示例里第 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 的行才算空行,只有缩进或空格的行仍会被当作有内容的行照常编号。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具