短代码

highlight

用 highlight 短代码插入带语法高亮的代码片段,并给出全部选项。

highlight 短代码调用 transform.Highlight 函数,根据传入的代码、语言与选项生成带语法高亮的 HTML。

参数

highlight 短代码接受三个参数。

{{< highlight LANG OPTIONS >}}
CODE
{{< /highlight >}}
CODE
(string)要高亮的代码。
LANG
(string)代码的语言。取值大小写不敏感。
OPTIONS
(string)零个或多个用空格分隔、包在引号中的键值对。可以为每个选项在项目配置中设置默认值,键名大小写不敏感。

示例

content/example.md
{{< highlight go "linenos=inline, hl_lines=3 6-8, style=emacs" >}}
package main

import "fmt"

func main() {
    for i := 0; i < 3; i++ {
        fmt.Println("Value of i:", i)
    }
}
{{< /highlight >}}

Hugo 据此渲染出高亮后的 HTML:LANG 决定使用哪个词法分析器(lexer),OPTIONS 决定行号、强调行与配色等外观。

也可以把 highlight 短代码用于行内代码片段:

This is some {{< highlight go "hl_inline=true" >}}fmt.Println("inline"){{< /highlight >}} code.

考虑到上例写法冗长,如果需要频繁高亮行内代码片段,可以用更短的名字和预设选项创建自己的短代码:

layouts/_shortcodes/hl.html
{{ $code := .Inner | strings.TrimSpace }}
{{ $lang := or (.Get 0) "go" }}
{{ $opts := dict "hl_inline" true "noClasses" true }}
{{ transform.Highlight $code $lang $opts }}
This is some {{< hl >}}fmt.Println("inline"){{< /hl >}} code.

选项

短代码的 OPTIONS 参数与围栏代码块的选项一一对应:anchorLineNos、codeFences、guessSyntax、hl_Lines、hl_inline、lineAnchors、lineNoStart、lineNos、lineNumbersInTable、noClasses、style、tabWidth、wrapperClass。各选项的含义、类型与默认值见语法高亮,那里同时给出了生成外部样式表的 hugo gen chromastyles 命令。