博客优化-修改软换行渲染配置

作者: 潘峰 / 2023-04-02 / 分类: Work

博客优化

博客优化-MarkDown 软换行问题

事情的背景是这样的:在看一个博主的技术视屏时,发现他用 Typora 编写 Markdown 文档时可以做到所见即所得。
其实这种功能我在使用石墨文档时也接触过,体验还是很不错的。
但平时我是用 VSCode 来编写 Markdown 文档的,原生没有这类功能,于是我就想是否能找到一个支持该模式的插件。
所幸找到了一位国内开发者开源的插件 Office Viewer(Markdown Editor)
该插件基于 Vditor 实现了对 Markdown 文档的所见即所得编辑 (WYSIWYG)。很好地解决了我的需求。
但在使用过程中,我遇到了一个段内换行问题:
众所周知,在 Markdown 的标准语法中,换行需要通过两个或以上数量的空格加回车实现。
而在 Vditor 中,换行只需通过回车即可完成,并且使用 Office Viewer 插件修改原来的文档时,还会自动删除行尾原有的空格。
但我使用的静态网站生成器 Hugo 默认支持的是 Markdown 的标准语法,即需要通过两个空格加一个回车来进行换行。
这就导致,通过 Office Viewer 插件编辑的 Markdown 文档通过 Hugo 渲染后,无法正确显示换行。
为了解决该问题,摆在我面前的只有两个方案:
一是遵循 Markdown 标准语法(需要修改用到的插件的配置或代码);
二是遵循 Vditor 背后遵循的 Markdown 语法标准(需要修改 Hugo 的配置或代码)。
在参考了国内一些博客网站所支持的标准后,我按照自己的使用偏好,选择了第二种方案。
于是,便有了接下来的一系列问题。

初步搜索问题解决方案

首先通过谷歌搜索“hugo 换行”,第一个搜索到的是这篇:Hugo - Markdown 换行处理。按文章的方案,我添加了如下配置:

[blackfriday]
  extensions = ["hardLineBreak"]

但重启本地服务后,发现并未生效。反复尝试不同的配置位置和修改大小写后,仍然不行。

于是我尝试直接搜索该方案的内容,找到了 HUGO 官网的一篇讨论贴。相关开发人员确实提到了可以通过上述配置来解决该问题。然后我就有点 emo 了。但我注意到讨论的时间已经是 2018 年了(实际上是折腾了好久后才发现 😂),都已经是 4 ~ 5 年前的东西了,可能是 Hugo 已经修改了渲染引擎。

搜索引擎搞不定考虑直接去官网

在搜索引擎给到的答案并不能解决问题后,我索性直接查阅官方文档了。

在官网通过搜索 “blackfriday” 字样,我来到了这里。在上下文中,我看到了这句话:"Goldmark is from Hugo 0.60 the default library used for Markdown"。于是,我理解了为何原先的方案是不生效的。

但是在大致看了一眼官方文档给出的配置后,我发现并没有 “line break” 之类的字样,于是我就直接去 Goldmark 的 GitHub 主页寻找答案。

通过搜索 “line break”,我找到了 extension.WithEastAsianLineBreaks 这个拓展配置。然后尝试在 Hugo 项目的配置文件中进行配置。但无论怎么试,仍旧不成功。

最终的问题解决方案

在几经折腾而无果后,我考虑到要不再仔细看一下官网文档(还不行的话就只能去查阅源码了)。于是,我看到了这段描述:

hardWrapsBy

default, Goldmark ignores newlines within a paragraph. Set to true to render newlines as <br> elements.

呃,原来是这样的。。。

最后,通过在自己项目的根目录下的配置文件 hugo.toml 中添加如下配置,完美解决问题。

[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      hardWraps = true