3、代码块
代码块
文档中的代码块功能非常强大。
代码标题
你可以通过在语言后面添加 title
键(在它们之间留一个空格)来向代码块添加标题。
```jsx title="/src/components/HelloCodeTitle.js"
function HelloCodeTitle(props) {
return <h1>Hello, {props.name}</h1>;
}
```
typora效果:
docus渲染后效果:
语法高亮
代码块是由 3 个反引号字符串包围的文本块。MDX 的 规范可以查看 这个参考。
```js
console.log('Every repo must come with a mascot.');
```
使用代码块的匹配语言元字符串,Docusaurus 将自动选择语法高亮,由 Prism React 渲染器 提供支持。
console.log('Every repo must come with a mascot.');
主题化
默认情况下,我们使用的 Prism 语法高亮主题 是 苍夜。你可以通过在 docusaurus.config.js 中将 prism
中的 theme
字段作为 themeConfig
传递来将其更改为另一个主题。
例如,如果你更喜欢使用 dracula
高亮主题:
docusaurus.config.js
import {themes as prismThemes} from 'prism-react-renderer';
export default {
themeConfig: {
prism: {
theme: prismThemes.dracula,
},
},
};
因为 Prism 主题只是一个 JS 对象,所以如果你对默认主题不满意,也可以编写自己的主题。Docusaurus 增强了 github
和 vsDark
主题以提供更丰富的亮点,你可以查看我们对 light 和 dark 代码块主题的实现。
支持的语言
默认情况下,Docusaurus 附带 常用语言 的子集。
默认情况下不启用一些流行语言,例如 Java、C# 或 PHP。
要为任何其他 Prism 支持的语言 添加语法高亮,请在其他语言数组中定义它。
每种附加语言都必须是有效的 Prism 组件名称。例如,Prism 会将语言 cs
映射到 csharp
,但只有 prism-csharp.js
作为组件存在,因此你需要使用 additionalLanguages: ['csharp']
。你可以查看 node_modules/prismjs/components
以查找所有可用的组件(语言)。
例如,如果你想为 PowerShell 语言添加高亮:
docusaurus.config.js
export default {
// ...
themeConfig: {
prism: {
additionalLanguages: ['powershell'],
},
// ...
},
};
添加 additionalLanguages
后,重新启动 Docusaurus。
如果你想为 Prism 尚不支持的语言添加高亮,你可以 swizzle prism-include-languages
:
- npm
- Yarn
- pnpm
npm run swizzle @docusaurus/theme-classic prism-include-languages
yarn swizzle @docusaurus/theme-classic prism-include-languages
pnpm run swizzle @docusaurus/theme-classic prism-include-languages
它将在你的 src/theme
文件夹中生成 prism-include-languages.js
。你可以通过编辑 prism-include-languages.js
添加对自定义语言的高亮支持:
src/theme/prism-include-languages.js
const prismIncludeLanguages = (Prism) => {
// ...
additionalLanguages.forEach((lang) => {
require(`prismjs/components/prism-${lang}`);
});
require('/path/to/your/prism-language-definition');
// ...
};
当你编写自己的语言定义时,可以参考 Prism 的官方语言定义。
添加自定义语言定义时,你不需要将语言添加到 additionalLanguages
配置数组,因为 Docusaurus 仅查找 Prism 提供的语言中的 additionalLanguages
字符串。在 prism-include-languages.js
中添加语言导入就足够了。
线条高亮
高亮并附有注释
你可以使用带有 highlight-next-line
、highlight-start
和 highlight-end
的注释来选择高亮的行。
```js
function HighlightSomeText(highlight) {
if (highlight) {
return 'This text is highlighted!';
}
return 'Nothing highlighted';
}
function HighlightMoreText(highlight) {
if (highlight) {
return 'This range is highlighted!';
}
return 'Nothing highlighted';
}
```
支持的注释语法:
风格 | 语法 |
---|---|
C 型 | /* ... */ 和 // ... |
JSX 风格 | {/* ... */} |
Bash 风格 | # ... |
HTML 风格 | <!-- ... --> |
我们会尽力根据语言推断使用哪一组注释样式,并默认允许所有注释样式。如果当前不支持注释样式,我们愿意添加它们!欢迎拉请求。请注意,不同的注释风格没有语义差异,只有内容不同。
你可以为 src/css/custom.css
中高亮的代码行设置自己的背景颜色,这将更好地适合你选择的语法高亮主题。下面给出的颜色适用于默认的高亮主题 (Palenight),因此如果你使用其他 主题,则必须相应地调整颜色。
/src/css/custom.css
:root {
--docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);
}
/* If you have a different syntax highlighting theme for dark mode. */
[data-theme='dark'] {
/* Color which works with dark mode syntax highlighting theme */
--docusaurus-highlighted-code-line-bg: rgb(100, 100, 100);
}
如果你还需要以其他方式设置高亮的代码行的样式,则可以针对 theme-code-block-highlighted-line
CSS 类。
使用元数据字符串高亮
你还可以在语言元字符串中指定高亮的行范围(在语言后面留一个空格)。要高亮多行,请用逗号分隔行号或使用范围语法来选择一行块。此功能使用 parse-number-range
库,你可以在其项目详细信息中找到 更多语法。
```jsx {1,4-6,11}
import React from 'react';
function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}
return <div>Foo</div>;
}
export default MyComponent;
```