代码块
代码块
<CodeBlock> 组件用于显示带语法高亮的代码示例。代码块支持行高亮、聚焦、标题和深度链接,让您的代码示例更易读、更具交互性。
用法
使用三个反引号,并可选地添加语言标识符。
支持的语言
Fern 通过 Shiki 为以下语言提供语法高亮支持:
javascript(别名:js、node)pythonjavatypescript(别名:ts)csharpcppcphpgorustrubyswiftkotlinsqlbash(别名:shell、sh)curlmarkdown(别名:md)http
如果您指定了不在该列表中的语言,Fern 仍会显示代码块,但不会进行语法高亮。
变体
标题
在语言标识符之后添加标题,即可为代码片段添加标题。或者使用 title 属性(title="带标题的片段")或 filename 属性(filename="带标题的片段")实现相同效果。
行高亮
通过在语言标识符后的 {} 中放入数字范围,可以高亮代码片段中的特定行。范围为闭区间,可以是单个数字、用逗号分隔的多个数字,或区间。
行聚焦
通过添加注释 [!code focus],或在语言标识符后添加 focus 属性,可聚焦特定行。
起始行号
通过在语言标识符后添加 startLine 属性,可控制代码块中显示的第一行行号。这对较长的代码片段非常有用——既能突出主要逻辑,又能保留完整上下文。
最大高度
在语言标识符后添加 maxLines 属性可控制代码块的最大高度。maxLines 应为表示最大显示行数的数字。默认情况下,代码块最多显示 20 行。(如需禁用默认 20 行限制,请将 maxLines 设为 0。)
当您使用 maxLines 时,鼠标悬停时右上角会自动出现展开按钮,用户点击后可在覆盖在页面上的展开层中查看完整代码内容。
自定义样式
如需隐藏展开按钮或添加自定义样式,请针对 .fern-expand-button 选择器进行设置:
换行处理
默认情况下,超出代码块宽度的长行会变为可滚动:
要禁用滚动并将超出部分换到下一行,请使用 wordWrap 属性:
隐藏行号
默认情况下,代码块会在边栏显示行号(在 bash/shell 代码块中还会显示 $ / > 前缀)。要隐藏行号和前缀,请将 showLineNumbers 设置为 false:
深度链接
通过定义 links 映射,可让代码块中的特定文本变为可点击。这对从代码示例直接链接到文档、API 参考或相关资源非常有用。
links 属性接受一个映射,其中键为匹配模式(精确字符串或正则表达式),值为目标 URL。
精确字符串匹配
links 属性使用 JSON 格式。映射中的每个键会与代码块中的文本进行精确匹配,匹配到的文本将变为指向对应 URL 的可点击链接。
正则表达式模式匹配
您可以使用正则表达式实现更灵活的匹配。当您想要匹配多种文本变体或模式时,这非常有用。
在下面的示例中,/get\\w+/ 会同时匹配 getPlant 和 getGarden,而 /Plant(Store|Client)/ 会同时匹配 PlantStore 和 PlantClient。
使用正则表达式时,请记得在 JSON 字符串中用双反斜杠转义特殊字符(例如 \\w+、\\d+)。
嵌入代码文件
通过在 <Code> 组件上使用 src 属性,可以嵌入本地或外部文件中的代码。对于本地文件,请使用相对于 docs 目录的路径;对于外部文件,请使用完整 URL,从 GitHub 等远程源直接拉取代码示例。
<Code> 组件支持与 <CodeBlock> 相同的所有属性,包括 title、language 和 maxLines。
带标签页的代码块
在标签页界面中显示多个代码块。
语言同步
设置了相同语言的代码块会在整个文档站点中自动同步。当用户选择某种语言时,所有该语言的代码块都会同步切换。语言偏好会跨浏览器会话保留。
代码块会自动与相同语言的标签页同步。
链接到特定语言的内容
您可以通过在 URL 末尾添加 ?language=<某种语言> 来直接链接到特定语言的内容。这将设置用户访问页面时默认显示的语言标签。
例如,以下链接会默认显示 Java 标签页:https://buildwithfern.com/learn/docs/writing-content/components/tabs?language=java
这适用于具有 language 属性的 CodeBlocks 和 Tab 组件。
自定义同步
使用 for 属性可以创建独立于语言的自定义同步分组。这对于按其他维度分组代码块(例如按包管理器或框架)非常有用。
属性
代码块属性
这些属性可以在 markdown 代码块的语言标识符后添加,也可以作为 <CodeBlock> 组件的 props 使用。
用于语法高亮的编程语言。支持的语言:javascript(别名:js、node)、python、java、typescript(别名:ts)、csharp、cpp、c、php、go、rust、ruby、swift、kotlin、sql、bash(别名:shell、sh)、curl、markdown(别名:md)、http。
显示在代码块上方的标题。可以在语言标识符后内联指定,或通过 title="..." 或 filename="..." 属性指定。
要高亮的行,使用 {2-4, 6} 语法指定。支持单个数字、范围和逗号分隔的列表。
要聚焦的行,使用 focus={2-4} 指定。用法与 highlight 相同,但会将未聚焦的行变暗。
开始显示的行号。在显示较长代码文件的特定部分时非常有用。
开始添加滚动前显示的最大行数。设置为 0 可禁用此限制。
是否对长行进行换行处理(而非滚动显示)。
是否在边栏显示行号,包括 bash/shell 代码块中的命令提示符($ 和 >)。设置为 false 可隐藏行号,让代码示例外观更简洁。
自定义同步分组标识符。会覆盖默认的基于语言的同步行为。
文本模式到 URL 的映射,用于在代码内创建可点击链接。键可以是精确字符串或正则表达式(例如 {"/get\\w+/": "/api-docs"})。
<Code> 属性
<Code> 组件用于嵌入文件中的代码。它接受上面列出的所有代码块属性,外加:
本地文件路径(相对于 docs 目录)或外部文件的完整 URL(例如 GitHub raw URL)。
从源文件中提取的行号。支持单行([5])、范围([2-4])和组合形式([1-3,5,7-10])。行号从 1 开始。