前言
Hugo官网在这里给出了详细的语法高亮配置说明。
一般有以下几种常见方法:
1. 使用Hugo默认Chroma (弃,一些代码无法高亮)
使用Pygments (弃,一些代码无法高亮)
使用Highlight Shortcode (弃,高亮颜色渲染问题)
使用Pygments进行高亮
Hugo从0.28版本开始默认使用Chroma来作语法高亮。Chroma使用go编写的,渲染速度很快。 如果需要使用Pygments,需要先安装Pygments,并在网站配置文件中设置一些相关参数。
Pygments安装
我在建立Hugo镜像时已经安装了Pygments,不然需要先安装Pygments。如果在Debian和Ubuntu系统中可以用下面语句安装,其他系统也可参考:
$ sudo apt-get install python3-pygments
Pygments配置
下面是我按官网在 config.toml
中配置的参数:
[highlighting]
pygmentsUseClassic = true
pygmentsCodeFences = true
pygmentsStyle = "autumn"
其中,
pygmentsUseClassic=true
说明使用Pygments来进行语法高亮;
pygmentsCodeFences=true
使在code fence中的根据设置的语言标签进行语法高亮;
pygmentsStyle="autumn"
设置高亮的风格,可以在这里查看各高亮风格,选择最心仪的。
我选择了 autumn
,下面是在code fence中的高亮示例:
#!/usr/bin/python3
from engine import RunForrestRun
"""Test code for syntax highlighting!"""
class Foo:
def __init__(self, var):
self.var = var
self.run()
def run(self):
RunForrestRun() # run along!
由于语法高亮渲染需要时间,因此语法高亮默认是放在缓存的,如果需要查看则需要清空缓存。
Pygments存在问题
与Chroma一样,Pygments对于一些格式无法进行高亮。现在发现的就有无法对shell脚本高亮,也无法识别toml文件。
使用Highlight Shortcode进行高亮
除了可以使用code fence高亮代码,还可Hugo内建的highlight shortcode进行高亮。highlight shortcode的优点是不仅可以根据语法进行高亮,还能在code fence中指定行进行mark,还可以设置代码的行号,比较灵活。
使用下面的语法:
{{< highlight python "linenos=inline, hl_lines=3 8 12, linenostart=199" >}}
# 代码放在这里
{{< /highlight >}}
其中,linenos=inline
或者linenos=table
提示显示代码前的行数,hl_lines
设置高亮代码,linenostart
设置代码行数的起始数字。
199#!/usr/bin/python3
200
201from engine import RunForrestRun
202
203"""Test code for syntax highlighting!"""
204
205class Foo:
206 def __init__(self, var):
207 self.var = var
208 self.run()
209
210 def run(self):
211 RunForrestRun() # run along!
2018.8.13 Highlight Shortcode
颜色渲染问题修正
如题,突然发现颜色渲染有问题,所以只能逐个看到底用了那个css。发现我的主页用了highlight shortcode
的css样式和官网的不一样。鉴于不想花太多时间,只要能看就要,因此在override.css
中加了强制的css样式,于是问题暂时打个不怎么好看的补丁,但至少highlight shortcode
还是勉强可看了。
.highlight pre {
background-color: #f7f7f7 !important;
color: rgb(194, 192, 192) !important;
}
2018.8.21 自建shortcode替代Hightlight Shortcode
由于highlight shortcode的渲染样式实在是太诡异,难以调整,因此自己建立专门用于高亮的shortcode,这些shortcode也可以在代码块中使用,可以不仅只渲染一行,更为灵活方便。于是就可以弃用highlight shortcode了。具体内容详见Blog养成记15 创建shortcode模板便捷高亮内容。
使用highlight.js进行高亮
highlight.js这个插件使用起来特别方便,还可以定制化选择需要高亮的语言,只需要在highlight.js官网选择所需要的语言,下载即可。然后解压文件中,highlight.pack.js
决定那些语言的代码会根据语法进行高亮,在style文件夹中选择喜欢的css样式文件,css文件决定代码高亮的颜色,最后我选择了github-gist.css
然后需要在<head>中增加:
<link rel="stylesheet" href="/path/to/styles/default.css">
在<body>结束前增加:
<script src="/path/to/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
Resource资源链接汇总
我建立的docker for Hugo开发镜像: Docker Hub上的repo、Github上的repo。
我的个人主页Hugo代码: blog-hugo
Hugo官网、关于语法高亮说明、pygments主题配色、highlight.js官网
版本控制
Version | Action | Time |
---|---|---|
1.0 | Init | 2018-01-09 |
1.1 | 增加tag、版本控制及资源链接 | 2018-01-17 |
1.2 | highlight颜色修正 | 2018-08-13 |
2.0 | 修改结构,增加highlight.js | 2018-08-21 |