← 返回博客

如何将文本按固定宽度换行

2026-04-12 · 5 分钟阅读

为什么需要固定宽度换行

在某些场景下,文本必须按固定宽度换行:终端和命令行输出(传统终端宽度为 80 列);纯文本电子邮件(RFC 2822 建议每行不超过 78 字符);代码中的注释块(遵循项目的行宽规范,通常是 80 或 120 字符);版本控制提交信息(约定第一行不超过 72 字符);Markdown 文档的源代码(保持可读性)。

软换行 vs 硬换行

有两种换行方式的重要区别:软换行(Soft Wrap)是编辑器在显示时自动折叠过长的行,实际文本中没有换行符,行在不同宽度的窗口中会自动调整;硬换行(Hard Wrap)是在文本中实际插入换行符(\n),将长行物理分割为多行,换行位置固定不变。"将文本按固定宽度换行"指的是插入硬换行,而不仅仅是视觉上的软换行。

折行算法的考量

折行不是简单地每 80 个字符插入一个换行符,因为这会在单词中间截断。好的折行算法会在最近的单词边界处换行(词边界折行),确保:不在单词中间截断;超过宽度限制的单个长词单独占一行;可以选择保留原有段落分隔符(段落内折行但段落间保留空行)。

代码实现

# Python: 使用 textwrap 模块
import textwrap

text = "This is a very long sentence that needs to be wrapped at a specific column width."

# 按 60 字符宽度换行
wrapped = textwrap.fill(text, width=60)
print(wrapped)

# 换行但保留缩进
wrapped_indent = textwrap.fill(text, width=60,
                               initial_indent='    ',
                               subsequent_indent='    ')

# 处理整段文字(保留段落分隔)
paragraphs = text.split('\n\n')
result = '\n\n'.join(textwrap.fill(p, width=72) for p in paragraphs)

命令行工具

# fold 命令:按字符数折行
fold -w 80 input.txt

# fold -s:在空格处折行(不截断单词)
fold -s -w 80 input.txt

# fmt 命令:更智能的文本折行(处理段落)
fmt -w 72 input.txt

# par 工具:高级段落格式化(如果已安装)
par 72 < input.txt

代码注释的最佳实践

在代码中编写长注释时,多数风格指南建议将注释块限制在 79-80 字符以内(包括缩进和注释符号)。Python PEP 8 建议代码行最长 79 字符,注释最长 72 字符(留出一些余量)。大多数现代 IDE(VS Code、PyCharm)都有内置的行宽标尺,并可以自动折行注释。EditorConfig 文件可以在项目级别统一所有开发者的行宽设置。

中文文本的宽度计算

中文字符(以及其他全角 CJK 字符)在等宽字体中占用两个字符宽度,这称为"东亚全角"字符。在计算行宽时,每个中文字符应该计为 2 个宽度单位,而不是 1 个。Python 的 wcwidth 库和 unicodedata.east_asian_width() 函数可以帮助正确计算包含中文的文本行宽,确保折行位置正确。

立即免费使用相关工具

免费使用 →