# 问题
从Blogger迁移到Jekyll+Zeit之后,由于Jekyll不支持在HTML中渲染Markdown,所以像下面这样嵌在details
中的代码段不会被高亮显示。
跟别提我从Blogger导入的代码段,还都使用着Highlight.js的语法,这样的代码会直接被Rouge无视:
<pre><code class="lang">
...
</code></pre>
于是,迁移到Jekyll后,为了在<details>
中插入代码,仍然选用了highlight.js作为代码高亮引擎。
但在更换主题到plainwhite之后,我作为强迫症患者,想保留Rouge,摆脱Highlight.js,与时俱进。这就涉及到怎么将上面的代码段替换成Rouge支持的语法。
# 解决
在网上翻阅Rouge的资料,发现Rouge除了兼容Markdown的代码块之外,还兼容liquid。其语法如下:
{% highlight lang %}
...
{% endhighlight %}
所以只要将上面提到的<pre>
替换成这边的{% highlight lang %}
就阔以了。但我可不想手动操作,抱着试一试的心态,在Eric鸽鸽吹上天的VSCode里寻找批量替换的插件。没想到还真的给我找着了,Batch Replacer这一插件支持一键替换Workspace中所有的文件内容,并且语法还支持RegExp。
Batch Replacer Extension
刚学会了RegExp的我摩拳擦掌,跃跃欲试,编写了下面这段替换代码。
replace-regex "<pre>\s*<code class="([^"]*)">"
with "{% highlight $1 %}"
replace-regex "</code>\s*</pre>"
with "{% endhighlight %}"
在Workspace添加_post文件夹,按下Ctrl+Shift+P
,键入Batch Refit
,回车,大功告成。
现在所有的Highlight.js语法的代码块都已经被替换成了Rouge代码块,即便被包裹在HTML代码中,也能够被轻松识别渲染,是不是很机智呢,哈哈哈哈哈!