Markdown 拓展

Header Anchors

所有的标题将会自动地应用 anchor 链接,anchor 的渲染可以通过 markdown.anchor 来配置。

链接

内部链接

网站内部的的链接,将会被转换成 <router-link> 用于 SPA 导航。同时,站内的每一个文件夹下的 README.md 或者 index.md 文件都会被自动编译为 index.html,对应的链接将被视为 /

以如下的文件结构为例:

  1. .
  2. ├─ README.md
  3. ├─ foo
  4. ├─ README.md
  5. ├─ one.md
  6. └─ two.md
  7. └─ bar
  8. ├─ README.md
  9. ├─ three.md
  10. └─ four.md

假设你现在在 foo/one.md 中:

  1. [Home](/) <!-- 跳转到根部的 README.md -->
  2. [foo](/foo/) <!-- 跳转到 foo 文件夹的 index.html -->
  3. [foo heading](./#heading) <!-- 跳转到 foo/index.html 的特定标题位置 -->
  4. [bar - three](../bar/three.md) <!-- 具体文件可以使用 .md 结尾(推荐) -->
  5. [bar - four](../bar/four.html) <!-- 也可以用 .html -->

链接的重定向 1.0.0-alpha.37

VuePress 支持重定向到干净链接。如果一个链接 /foo 找不到,VuePress 会自行寻找一个可用的 /foo//foo.html。反过来,当 /foo//foo.html 中的一个找不到时,VuePress 也会尝试寻找另一个。借助这种特性,我们可以通过官方插件 vuepress-plugin-clean-urls 定制你的网站路径。

注意

无论是否使用了 permalink 和 clean-urls 插件,你的相对路径都应该依赖于当前的文件结构来定义。在上面的例子中,即使你将 /foo/one.md 的路径设为了 /foo/one/,你依然应该通过 ./two.md 来访问 /foo/two.md

外部链接

外部的链接将会被自动地设置为 target="_blank" rel="noopener noreferrer":

Front Matter

VuePress 提供了对 YAML front matter 开箱即用的支持:

  1. ---
  2. title: Blogging Like a Hacker
  3. lang: en-US
  4. ---

这些数据可以在当前 markdown 的正文,或者是任意的自定义或主题组件中使用。

想了解更多,请移步 Front Matter

GitHub 风格的表格

输入

  1. | Tables | Are | Cool |
  2. | ------------- |:-------------:| -----:|
  3. | col 3 is | right-aligned | $1600 |
  4. | col 2 is | centered | $12 |
  5. | zebra stripes | are neat | $1 |

输出

TablesAreCool
col 3 isright-aligned$1600
col 2 iscentered$12
zebra stripesare neat$1

Emoji

输入

  1. :tada: :100:

输出

? ?

目录

输入

  1. [[toc]]

输出

目录(Table of Contents)的渲染可以通过 markdown.toc 选项来配置。

自定义容器 默认主题

输入

  1. ::: tip
  2. This is a tip
  3. :::
  4. ::: warning
  5. This is a warning
  6. :::
  7. ::: danger
  8. This is a dangerous warning
  9. :::

输出

提示

This is a tip

注意

This is a warning

警告

This is a dangerous thing

你也可以自定义块中的标题:

  1. ::: danger STOP
  2. Danger zone, do not proceed
  3. :::

STOP

Danger zone, do not proceed

参考:

代码块中的语法高亮

VuePress 使用了 Prism 来为 markdown 中的代码块实现语法高亮。Prism 支持大量的编程语言,你需要做的只是在代码块的开始倒勾中附加一个有效的语言别名:

输入

  1. ``` js
  2. export default {
  3. name: 'MyComponent',
  4. // ...
  5. }
  6. ```

输出

  1. export default {
  2. name: 'MyComponent',
  3. // ...
  4. }

输入

  1. ``` html
  2. <ul>
  3. <li
  4. v-for="todo in todos"
  5. :key="todo.id"
  6. >
  7. {{ todo.text }}
  8. </li>
  9. </ul>
  10. ```

输出

  1. <ul>
  2. <li
  3. v-for="todo in todos"
  4. :key="todo.id"
  5. >
  6. {{ todo.text }}
  7. </li>
  8. </ul>

在 Prism 的网站上查看 合法的语言列表

代码块中的行高亮

输入

  1. ``` js {4}
  2. export default {
  3. data () {
  4. return {
  5. msg: 'Highlighted!'
  6. }
  7. }
  8. }
  9. ```

输出

  1. export default {
  2. data () {
  3. return {
  4. msg: 'Highlighted!'
  5. }
  6. }
  7. }

行号

你可以通过配置来为每个代码块显示行号:

  1. module.exports = {
  2. markdown: {
  3. lineNumbers: true
  4. }
  5. }
  • 示例:ImageImage

导入代码段 beta

你可以通过下述的语法导入已经存在的文件中的代码段:

  1. <<< @/filepath

它也支持 行高亮

  1. <<< @/filepath{highlightLines}

输入

  1. <<< @/../@vuepress/markdown/__tests__/fragments/snippet.js{2}

输出

  1. export default function () {
  2. // ..
  3. }

注意

由于代码段的导入将在 webpack 编译之前执行,因此你无法使用 webpack 中的路径别名,此处的 @ 默认值是 process.cwd()

进阶配置

VuePress 使用 markdown-it 来渲染 Markdown,上述大多数的拓展也都是通过自定义的插件实现的。想要进一步的话,你可以通过 .vuepress/config.jsmarkdown 选项,来对当前的 markdown-it 实例做一些自定义的配置:

  1. module.exports = {
  2. markdown: {
  3. // markdown-it-anchor 的选项
  4. anchor: { permalink: false },
  5. // markdown-it-toc 的选项
  6. toc: { includeLevel: [1, 2] },
  7. extendMarkdown: md => {
  8. // 使用更多的 markdown-it 插件!
  9. md.use(require('markdown-it-xxx'))
  10. }
  11. }
  12. }