VitePress
01. 安装&运行
1.1 初始化项目
$ npx vitepress init
$ pnpm vitepress init
$ bunx vitepress init
1.2 运行
$ npm run docs:dev
$ pnpm run docs:dev
$ yarn docs:dev
$ bunx run docs:dev
1.3 打包
$ npm run docs:build
输出目录docs/.vitepress/dist
02. Markdown 语法
参考官网
标题锚点
自定义锚点
md
# 使用自定义锚点 {#my-anchor}
链接
内部链接
外部链接
frontmatter
GitHub 风格的表格
输入
md
| Tables | Are | Cool |
| ------------- | :-----------: | ----: |
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
输出
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
col 2 is | centered | $12 |
zebra stripes | are neat | $1 |
Emoji 🎉
输入
md
:tada: :100:
输出
🎉 💯
这里可以找到所有支持的 emoji 列表。
目录表(TOC)
输入
[[toc]]
输出
自定义容器
默认标题
输入
md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
输出
信息
This is an info box.
提示
This is a tip.
警告
This is a warning.
危险
This is a dangerous warning.
详细信息
This is a details block.
自定义标题
输入
md
::: danger STOP
危险区域,请勿继续
:::
::: details 点我查看代码
```js
console.log("Hello, VitePress!");
```
:::
输出
STOP
危险区域,请勿继续
点我查看代码
js
console.log("Hello, VitePress!");
代码块中的语法高亮
输入
md
```js
export default {
name: "MyComponent",
// ...
};
```
md
```html
<ul>
<li v-for="todo in todos" :key="todo.id">{{ todo.text }}</li>
</ul>
```
输出
js
export default {
name: "MyComponent",
// ...
};
vue
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.text }}
</li>
</ul>
在 Shikiji 的代码仓库中,可以找到合法的编程语言列表。
在代码块中实现行高亮
单行高亮
输入
md
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
输出
js
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
多行高亮
除了单行之外,还可以指定多个单行、多行,或两者均指定:
- 多行:例如
{5-8}
、{3-10}
、{10-17}
- 多个单行:例如
{4,7,9}
- 多行与单行:例如
{4,7-13,16,23-27,40}
输入
md
```js{1,4,6-8}
export default { // Highlighted
data () {
return {
msg: `Highlighted!
This line isn't highlighted,
but this and the next 2 are.`,
motd: 'VitePress is awesome',
lorem: 'ipsum'
}
}
}
```
输出
js
export default { // Highlighted
data () {
return {
msg: `Highlighted!
This line isn't highlighted,
but this and the next 2 are.`,
motd: 'VitePress is awesome',
lorem: 'ipsum'
}
}
}
注释高亮
使用 // [!code hl] 注释实现行高亮。
输入
md
```js
export default {
data() {
return {
msg: "Highlighted!", // [!code hl]
};
},
};
```
输出
js
export default {
data() {
return {
msg: "Highlighted!",
};
},
};
代码块中聚焦
输入
md
```js
export default {
data() {
return {
msg: "Focused!", // [!code focus]
};
},
};
```
输出
js
export default {
data() {
return {
msg: "Focused!",
};
},
};
代码块中的颜色差异
输入
md
```js
export default {
data () {
return {
msg: 'Removed' // [!code --]
msg: 'Added' // [!code ++]
}
}
}
```
输出
js
export default {
data () {
return {
msg: 'Removed'
msg: 'Added'
}
}
}
高亮“错误”和“警告”
输入
md
```js
export default {
data() {
return {
msg: "Error", // [!code error]
msg: "Warning", // [!code warning]
};
},
};
```
输出
js
export default {
data() {
return {
msg: "Error",
msg: "Warning",
};
},
};
行号
可以通过以下配置为每个代码块启用行号:
js
export default {
markdown: {
lineNumbers: true,
},
};
输入
md
```ts {1}
// 默认禁用行号
const line2 = "This is line 2";
const line3 = "This is line 3";
```
```ts:line-numbers {1}
// 启用行号
const line2 = 'This is line 2'
const line3 = 'This is line 3'
```
```ts:line-numbers=2 {1}
// 行号已启用,并从 2 开始
const line3 = 'This is line 3'
const line4 = 'This is line 4'
```
输出
ts
// 默认禁用行号
const line2 = "This is line 2";
const line3 = "This is line 3";
ts
// 启用行号
const line2 = 'This is line 2'
const line3 = 'This is line 3'
ts
// 行号已启用,并从 2 开始
const line3 = 'This is line 3'
const line4 = 'This is line 4'
导入代码片段
输入
md
<<< ./snippet-with-region.js#snippet {1,2,4-6 js:line-numbers}
输出
js
let a = 1;
let b = 2;
function test() {
return a + b;
}
./snippet-with-region.js
js
let other = 888;
// #region snippet
let a = 1;
let b = 2;
function test() {
return a + b;
}
// #endregion snippet
let another = 999;
代码组
输入
md
::: code-group
```js [config.js]
/**
* @type {import('vitepress').UserConfig}
*/
const config = {
// ...
};
export default config;
```
```ts [config.ts]
import type { UserConfig } from "vitepress";
const config: UserConfig = {
// ...
};
export default config;
```
:::
输出
js
/**
* @type {import('vitepress').UserConfig}
*/
const config = {
// ...
};
export default config;
ts
import type { UserConfig } from "vitepress";
const config: UserConfig = {
// ...
};
export default config;
在代码组中导入代码片段
输入
md
::: code-group
<!-- 文件名默认用作标题 -->
<<< ./snippet-with-region.js [snippet]
<!-- 也可以提供定制的代码组 -->
<<< ./snippet-with-region.js#snippet {1,2,4-6 js:line-numbers} [snippet with region]
:::
输出
js
let other = 888;
// #region snippet
let a = 1;
let b = 2;
function test() {
return a + b;
}
// #endregion snippet
let another = 999;
js
let a = 1;
let b = 2;
function test() {
return a + b;
}
包含 markdown 文件
提示
所选行范围的格式可以是: {3,}
、 {,10}
、{1,10}
输入: <!--
@include: ./vitePress-import.md{3,}
-->
./vitePress-import.md 3-结尾 内容:
md
### Sub Menu
> This is a test.
输出:
Sub Menu
This is a test.
数学方程
图片懒加载
js
export default {
markdown: {
image: {
// 默认禁用图片懒加载
lazyLoading: true,
},
},
};
在 Markdown 中使用 Vue
2
123
The count is: 0
{ "title": "Markdown 扩展", "titleTemplate": "模版", "description": "描述", "frontmatter": { "title": "Markdown 扩展", "titleTemplate": "模版", "description": "描述", "layout": "doc", "navbar": true, "sidebar": true, "aside": "right", "outline": [ 2, 3 ], "editLink": true, "footer": true, "pageClass": "custom-page-class-123" }, "headers": [], "relativePath": "views/note/vitePress.md", "filePath": "views/note/vitePress.md", "lastUpdated": 1706593644000 }