📢 新文章推送 · 每周更新优质内容 · 订阅更新 →
向下滚动
技术笔记

Hugo Chroma 代码语法高亮配置详解

AI 智能总结

Chroma 是什么

Chroma 是 Hugo 内置的代码语法高亮引擎,基于 Go 语言编写,是 Pygments 的纯 Go 替代品。它支持超过 200 种编程语言的语法解析和数十种配色主题,无需安装 Python 或额外依赖即可使用。

相较于前端方案(如 Prism.js、Highlight.js),Chroma 在构建阶段完成高亮转换,输出纯静态 HTML + CSS,不增加客户端 JavaScript 负担,页面加载速度更快。

基础配置

hugo.toml[markup.highlight] 段配置:

1[markup.highlight]
2  codeFences = true           # 启用围栏代码块 ```lang
3  guessSyntax = true          # 自动检测未标注语言的代码块
4  lineNos = true              # 显示行号
5  lineNumbersInTable = false  # false=行内样式, true=表格样式
6  noClasses = false           # false=使用外部CSS, true=内联样式
7  style = "monokai"           # 高亮主题
8  tabWidth = 2                # Tab 宽度

关键参数说明

参数说明
codeFences必须为 true,才能使用 ``` 语法
guessSyntax开启后,未标注语言的代码块会自动猜测语言
lineNostrue 显示行号,false 隐藏
noClassesfalse(推荐)使用 class 方式,方便 CSS 自定义;true 使用内联 style
style主题名称,如 monokaidraculagithubsolarized-dark

关于 lineNumbersInTable

设为 false(行内模式)时,行号和代码在同一 <span> 内,适合复制粘贴;设为 true(表格模式)时,行号和代码分列显示,复制不会带行号,但需要额外 CSS 处理。

常用配色主题

Hugo 内置了大量 pygments-style 主题,在 style 字段切换即可:

主题风格适用场景
monokai经典暗色,黄/绿/蓝配色技术博客首选
dracula紫底暗色,Dracula 风格暗色爱好者
github白底浅色浅色主题博客
github-darkGitHub 暗色风格暗色 GitHub 风
solarized-darkSolarized 暗色护眼暗色
solarized-lightSolarized 浅色护眼浅色
vimVim 编辑器配色复古风格
friendly浅色调通用浅色
emacsEmacs 编辑器配色经典风格

在本地可以运行 hugo gen chromastyles --style=monokai > syntax.css 导出任意主题的完整 CSS 文件,按需修改后放入 assets/css/ 覆盖默认样式。

明暗双主题适配

如果博客同时支持明亮和暗黑模式,推荐使用 noClasses = false + 外部 CSS 方案:

  1. [markup.highlight] 中设置 style = "monokai"(暗色主题作为基础)
  2. 在浅色模式下,通过 CSS 覆盖 chroma 类的背景色和文字色
  3. 或使用 Hugo 的 hugo gen chromastyles 同时导出两份 CSS,根据 [data-theme] 切换

也可以使用 CSS 变量策略,将 chroma 生成的静态颜色替换为 CSS 变量,实现一套代码适配双主题。

代码块增强

除了语法高亮本身,本站的代码块还集成了三项增强:

  • 复制按钮:代码块右上角的复制图标,点击一键复制全部代码
  • 折叠/展开:超长代码块(超过一定行数)自动折叠,点击展开查看完整代码
  • 暗黑适配:深色背景 + 适配暗色模式的文字色,切换主题时无缝过渡

这些增强通过独立的 JavaScript 模块实现,与 Chroma 引擎解耦,可单独开启或关闭。

常见问题

Q: 为什么复制代码时带了行号?

A: 将 lineNumbersInTable 设为 false(行内模式),或者设为 true(表格模式)配合 CSS 让行号列不可选中。

Q: 如何添加新的语言支持?

A: Chroma 内置了 200+ 语言,Hugo 会自动识别。如果需要特殊语言,确保代码块正确标注语言标识符即可。

Q: 如何禁用高亮?

A: 使用不存在的语言标识符,如 ```text```plain,Chroma 会跳过该代码块。

1 / 16
版权声明

本文作者 Lumin

本文链接 https://www.zhengquan.xyz/tech/hugo-chroma-highlight/

许可协议 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

请作者喝杯咖啡 ☕

  • 微信打赏
    微信支付
  • 支付宝打赏
    支付宝
点击按钮查看打赏二维码
🎁 推荐工具
试试这些实用在线工具,提升工作效率
前往工具集 →

留言评论

期待你的想法

评论加载中