代码块
文档中的代码块超级厉害 💪。
代码标题
你可以在语言后添加 title
(记得在语言和 title 之间加一个空格)来设置标题。
```jsx title="/src/components/HelloCodeTitle.js"
function HelloCodeTitle(props) {
return <h1>你好,{props.name}</h1>;
}
```
function HelloCodeTitle(props) {
return <h1>你好,{props.name}</h1>;
}
语法高亮
代码块是使用 3 个反引号包裹的文本块。 你可以参阅 MDX 的规范。
```js
console.log('每个仓库都应该有个吉祥物。');
```
在代码块中使用相应语言的标签,Docusaurus 会自动用 Prism React Renderer 选择相应的语法高亮。
console.log('每个仓库都应该有个吉祥物。');
高亮主题
By default, the Prism syntax highlighting theme we use is Palenight. 你可以通过 docusaurus.config.js 中的 themeConfig.prism
的 theme
字段来更改主题。
举个例子,如果你喜欢 dracula
高亮主题:
module.exports = {
themeConfig: {
prism: {
theme: require('prism-react-renderer/themes/dracula'),
},
},
};
因为每个 Prism 主题都只是一个 JS 对象,所以如果你对默认值不满意,也可以写一个自己的主题。 Docusaurus enhances the github
and vsDark
themes to provide richer highlight, and you can check our implementations for the light and dark code block themes.
支持的语言
By default, Docusaurus comes with a subset of commonly used languages.
一些流行语言,包括 Java、C#、PHP 在内,默认未启用。
要添加其他 Prism 所支持的语言的代码高亮,请定义在 additionalLanguages
列表中。
每个附加语言都必须是有效的 Prism 组件名称。 比如, Prism 会把 cs
这个_语言_映射到 csharp
,但只有 prism-csharp.js
才是真实存在的_组件_,所以你需要写 additionalLanguages: ['csharp']
。 你可以翻看 node_modules/prismjs/components
来找到所有可用的组件(和对应语言)。
举个例子,如果你想要支持 PowerShell 语言的高亮:
module.exports = {
// ...
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
来添加自定义语言的高亮支持:
const prismIncludeLanguages = (Prism) => {
// ...
additionalLanguages.forEach((lang) => {
require(`prismjs/components/prism-${lang}`);
});
require('/path/to/your/prism-language-definition');
// ...
};
在撰写自己的语言定义时,你可以参考 Prism 的官方语言定义。
行高亮
用注释实现行高亮
你 可以通过在注释中加入 highlight-next-line
, highlight-start
, 和 highlight-end
来选中哪些行可以被高亮。
```js
function HighlightSomeText(highlight) {
if (highlight) {
// highlight-next-line
return '这行被高亮了!';
}
return '这里不会';
}
function HighlightMoreText(highlight) {
// highlight-start
if (highlight) {
return '这块被高亮了!';
}
// highlight-end
return '这里不会';
}
```
function HighlightSomeText(highlight) {
if (highlight) {
return '这行被高亮了!';
}
return '这里不会';
}
function HighlightMoreText(highlight) {
if (highlight) {
return '这段被高亮了!';
}
return '这里不会';
}
受支持的注释语法:
样式 | 语法 |
---|---|
C 样式 | /* ... */ 及 // ... |
JSX 样式 | {/* ... */} |
Bash 样式 | # ... |
HTML 样式 | <!-- ... --> |
我们会尽可能地根据语言来推断注释风格的样式,默认情况下允许_所有的_注释风格。 如果有任何注释风格暂时没有被支持,我们乐意去添加对它们的支持。 欢迎发起拉取请求。 需要注意的是,不同注释风格不会有语义上的差别,只会有内容上的。
你可以在你的自定义样式文件 src/css/custom.css
中为高亮的代码行设置自己的背景颜色,让它更适合你选定的语言高亮主题。 下方的颜色适用于默认的语法高亮主题(Palenight)。如果你使用其他的主题,也需要做出相应的颜色调整。
:root {
--docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);
}
/* 如果你在暗黑模式用了不同的语法高亮主题。 */
[data-theme='dark'] }
/* 暗黑模式高亮主题下用的背景色 */
--docusaurus-highed code-bg: rgb(100, 100);
}
如果你还需要给高亮代码行加其他样式,你可以使用 theme-block-high-lighted-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;
```
import React from 'react';
function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}
return <div>Foo</div>;
}
export default MyComponent;
推荐你使用注释来实现语法高亮。 如果你把通过内嵌的注释来高亮代码,你就不需要在代 码块内容很长时手动去数代码行数了。 即使你添加/删除了某几行,你也不需要去调整行号的偏移范围。
- ```jsx {3}
+ ```jsx {4}
function HighlightSomeText(highlight) {
if (highlight) {
+ console.log('找到了高亮文本');
return '这个文本高亮了!';
}
return '没啥被高亮了';
}
```
下面我们将介绍可扩展的魔法注释是如何实现自定义指令及和功能的。 只有在不使用元数据字符串的数字范围时,魔法注释才会被解析。