• Markdown 拓展
    • Header Anchors
    • 链接
      • 内部链接
      • 链接的重定向 1.0.0-alpha.37
      • 外部链接
    • Front Matter
    • GitHub 风格的表格
    • Emoji
    • 目录
    • 自定义容器 默认主题
    • 代码块中的语法高亮
    • 代码块中的行高亮
    • 行号
    • 导入代码段 beta
    • 进阶配置

    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":

    • vuejs.org
    • VuePress on GitHub你可以自定义通过配置 config.markdown.externalLinks 来自定义外部链接的特性。

    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]]

    输出

    • Header Anchors
    • 链接
      • 内部链接
      • 链接的重定向 1.0.0-alpha.37
      • 外部链接
    • Front Matter
    • GitHub 风格的表格
    • Emoji
    • 目录
    • 自定义容器 默认主题
    • 代码块中的语法高亮
    • 代码块中的行高亮
    • 行号
    • 导入代码段 beta
    • 进阶配置

    目录(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-plugin-container

    代码块中的语法高亮

    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. }