hexo中代码高亮显示错误

Author Avatar
patrickcty 10月 01, 2021

问题

今天在 hexo 高亮的问题上卡了一下午 orz。起因是 Python 代码的高亮总是有异常,一大块代码都被识别成了注释,而且有装饰器的部分会多出莫名其妙的空行。

排查

使用开发者工作查看之后发现 Python 的代码块被识别成了其他语言的代码块,如 ruby。而 hexo 中默认使用的高亮工具是 highlight.js。因此首先怀疑是不是主题里面的一些配置异常。

观察 themes/hexo-theme-material/layout/_partial/import_js.ejs 发现只引入了 js 相关高亮的 js 代码,没有引入 Python 高亮的 js 代码。加入引用后重新生成,仍然显示异常。

观察其他主题的代码,只是引用了 highlight.js 包,并没有做额外的处理。怀疑是 hexo 自身的问题。由于 hexo 版本比较老,下载了一个新主题由于版本问题没运行成功,因此没有用其他主题来进行佐证。

再次在开发者工具中观察代码块,发现一块代码包含多个层,其中外围解析正确为 Python,中层解析异常,最内层又解析正常。根据 hexo 文档,由于 highlight.js 原生不支持行号,hexo 将输出包裹在了 <figure><table> 内部。可能正是这个过程中有 bug 导致最终显示的时候没有解析到正确的语言。

解决

在 _config.yml 中设置 highlight.line_number: false 即可。

总结

hexo 的主题通过定义多个 ejs 文件来动态生成博客的内容,如果想自定义的话可以修改对应的 ejs 文件。如果在主题中没有找到相应的问题那么可能就要从 hexo 本身来找问题了。

可惜我的前端功夫还不到家,还不能做到对前端内容进行更新 orz。好久没折腾这些了,感觉整个人都变菜了。