文本换行实战:按列宽硬折行,代码注释与邮件正文都对齐
讲清楚什么是按列宽硬折行,怎么在词边界折行而不切断单词,如何给代码注释、纯文本邮件、commit message、定宽排版加前缀并保留段落。
文本换行实战:把长段落按指定列宽硬折成整齐的行
写代码注释、发纯文本邮件、写 commit message 的时候,我反复撞上同一个坑:屏幕上看着整齐的一段话,粘到别的窗口里就挤成乱糟糟的一长条。原因很简单,大多数编辑器只做软换行。软换行只是让显示器替你把长行折回来看,底层仍然是一整行。一旦这一整行落到更窄的窗口、邮件客户端或者代码审查工具里,它就会按对方的宽度重新挤。要让换行跟着文字走,就得做硬折行:在指定的列宽处插入真正的换行符。
软换行和硬折行到底差在哪
软换行不改文字本身,只改显示效果,换行符并不存在;硬折行会真的往文本里写进换行符。判断方法很直接:把那段话复制到一个不会自动折行的纯文本框里,如果它瘫成一条横着滚的长线,说明刚才是软换行;如果它仍然一行一行整齐排着,说明已经硬折好了。代码注释、邮件、README、定宽文本框,要的都是后者,因为这些场景里别人看到的是原始字符,不是你这边的显示宽度。
按词边界折行:不切断单词
硬折行最关键的一条规则是按词边界折,也就是绝不把一个单词从中间切开。具体做法是:从行首往后累加字符,一旦再加下一个词就会超过列宽,就把这个词整体挪到下一行,让本行提前在词与词之间的空格处断开。这样每行都不会超过列宽,而且每个单词都完整。只有一种例外:某个词本身就比整列还长,比如一条很长的网址,这时它没法塞进任何一行,就单独占一行任它溢出。
如果你的场景里列宽是死规矩、不容商量,比如往定宽数据列里塞内容,就改用强制切。强制切在精确的列宽处断开,哪怕断在单词中间也照断。列宽 40 时,一条 120 字符的网址会被切成三段、每段 40 字符。读起来舒服的正文用按词折,硬上限优先的场合用强制切,两者各管一摊。
一个真实的输入输出例子
下面这段大约 160 字符的英文,我按 40 字符、词边界折行:
输入(一整行):
Hard wrapping inserts real newlines at a fixed column so your text keeps its shape wherever you paste it, instead of relying on the editor to soft wrap it on screen.
按 40 列、词边界折行后的输出:
Hard wrapping inserts real newlines at a
fixed column so your text keeps its
shape wherever you paste it, instead of
relying on the editor to soft wrap it on
screen.
每行都停在第 40 列之前,没有任何单词被从中间切开,行尾都落在空格处。把这段输出粘到任何不自动折行的地方,它都保持这个样子。
给每行加前缀:引用符号、注释斜杠、列表项
很多场景需要每行带一个固定前缀。纯文本邮件回复里每行开头是「> 」,代码注释里是两个斜杠,Markdown 列表里是项目符号。关键点在于:前缀要算进列宽预算里。如果你先按 80 折好,再手动给每行补一个「> 」,那些行就变成 82 列了。正确做法是在折行的时候就把前缀考虑进去,让它从列宽里扣掉,列宽 80、前缀占 2 字符时,每行放 78 字符正文加上前缀,整行仍然准准停在第 80 列。
为什么是 72 和 80
这两个数字不是随便选的。纯文本邮件普遍折在 72 列,因为每多一层回复就给每行加一个「> 」标记,72 再叠几层引用,仍能塞进老式 80 列终端而不会跑出边缘。代码用 80 列也是同一段终端历史延续下来的,而且并排 diff、分屏编辑时,没有一行跑出可视区,读起来才顺。写 commit message 也有约定俗成的规矩:首行(标题)控制在 50 字符以内,正文从第二段起折在 72 列,这样 git log 在窄终端里显示时不会断得难看。这些数字背后都是同一个诉求,让文字在最广泛的查看器里都好读。
保留段落,不要把全文揉成一团
折行的时候还要分清段落。合理的做法是把一个或多个空行当成段落分隔:每一段各自折行,段与段之间的空行原样保住,这样一篇两段的便条折完仍然是两段。如果你反过来想让每一行都独立处理、空行不做特殊照顾,把保留段落关掉就行,输入本来就是一条条分开的列表条目而非连续正文时,这样更顺手。
我自己的用法
我现在写函数上方那种多行说明注释,基本是先在普通编辑器里把话写顺,然后整段丢进折行工具,列宽设 80,前缀选两个斜杠,折出来的每一行都已经带好注释标记且没超宽,直接复制回函数上方,linter 一声不吭。还有个常踩的反面教训:别拿本来就带软换行残留的文字去折,如果输入每个视觉行后面已经有换行符,再折一遍只会把现成的短行折得更怪。我的顺序是先用去换行工具把它拼回完整段落,再按目标列宽重新折。
想直接上手按列宽折,可以用 Toolora 文本折行工具,列宽、按词还是强制切、行前缀、是否保留段落都能调,全部在浏览器本地跑,什么都不上传。
Made by Toolora · Updated 2026-06-13