Markdown和换行问题

26

大多数情况下,Markdown文件与源代码一样处理:它们在版本控制系统中,参与拉取请求和/或审核,并且格式良好。就像在源代码中一样,我经常看到在特定长度处插入换行符 - 就像代码格式化程序所做的那样。

许多编辑器根据当前窗口大小(即自动换行)动态执行此操作。此外,Markdown主要用于生成HTML页面、PDF文档或其他格式。手动插入的换行符经常导致这些情况下的混乱文本呈现。

将Markdown包裹在特定的行长度上是好还是坏?这个话题似乎是有争议的,甚至当前的CommonMark规范(v0.29)也有点摇摆不定:

正文中,如果一行文字没有在代码块或HTML标签内,并且没有被两个或更多空格或反斜杠{backslash}所跟随,则会将该行解析为软换行(softbreak)。(在HTML中,软换行可以被渲染为换行符或空格。在浏览器中,结果是相同的。在此示例中,将使用换行符。)
[…]
符合规范的解析器可以将软换行在HTML中呈现为换行符或空格。
渲染器还可以提供一个选项,将软换行呈现为硬换行。
然而,John Gruber 在2004年曾经说过
“一行或多行文本”的规则意味着Markdown支持“硬换行”文本段落。这与大多数其他文本到HTML格式化程序(包括Movable Type的“Convert Line Breaks”选项)有很大不同,后者会将段落中的每个换行符转换为 <br /> 标签。
当您确实想要使用Markdown插入<br />换行符时,您需要在一行的末尾加上两个或更多空格,然后按回车键。
是的,这需要稍微费点功夫才能创建一个 <br /> ,但简单的“每个换行都是<br />”规则对于Markdown无法奏效。 Markdown的电子邮件样式的块引用和多段落列表项目在使用硬换行格式化时效果最佳,并且看起来更好。
2个回答

8
大多数Markdown渲染器忽略单行换行符,因此将文本包装在一定长度内不会影响呈现的结果。然而,这可能会使代码更易于维护。因此,它不是反模式,有些项目甚至要求在其编码标准中使用。来自libstoragemgmt-doc的示例: libstoragemgmt-doc
" Set text width as 72.
autocmd Filetype markdown set tw=72

3
尽管 GitHub 看起来确实忽略了单行换行(见此代码片段),但 Pandoc 并不会忽略它们(例如命令 pandoc --self-contained --from markdown_github)。不过可能有一个标志可以解决这个问题。 - beatngu13
@beatngu13 你找到标志了吗?我在这里被“pandoc”咬了。 - WestCoastProjects
@javadba 根据手册,现在有 --wrap=auto|none|preserve。但是使用默认设置,我不再获得上述Gist的不同输出:pandoc --self-contained --from gfm --to html5 --output test.html https://gist.githubusercontent.com/beatngu13/754ceec042709e23d7945d3a953c2461/raw/e0c1e7465d68ba4f407a68eb3dabdeb237e255a4/markdown-and-line-wrapping.md - beatngu13

4

好坏往往取决于观点和背景。

在我个人转变喜好之后,我认为主要的区别在于是否将它们存储在像git这样的VCS中,或者仅为“个人使用”编写和阅读。

使用“每行一句话”的方式使得差异在“语义上”更加明确,因为它只影响到被更改的行/句子。整段重构并在git diff中显示……不太好。这会用“表现形式”隐藏实际更改。

如果这不是问题,那么有时较长且参差不齐的行会使得阅读和编写不太愉快,因此在维基、电子邮件等场合,我倾向于进行自动排版并限制行数,就像我正在打字一封信一样。

Markdown实际上并不是呈现形式,而是源代码,因此我们应该更加关注版本控制而不是源代码的可读性。

但是,“Markdown是源代码”的看法有一个警告,即并非所有渲染器都将两行文本渲染为一个段落,而是将换行符保留为“硬换行符”,导致结果也不太美观。


3
有人可能会认为,Markdown 的设计目的是使其源代码形式易于阅读。因此,在决定使用它时,你需要问自己一个根本性的问题:你的 Markdown 是否实际上被用作源代码,即其内容仅在其呈现形式中查看(或至少大部分如此)?还是像 Git 存储库中的 README.md 文件一样,源 Markdown 文件也经常被查看? 对于后者,我认为可读性比版本控制更重要,因此在这种情况下我更喜欢换行。 - carlfriedrich
问题在于Markdown有点不一致。似乎没有办法在标题中使用硬换行。 - callegar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接