npm 文档:markdown-vuepress-code-snippet-enhanced (opens new window)

使用这个插件就可以实现文章和代码块分离,挺有用

# 安装

yarn add -D markdown-it-vuepress-code-snippet-enhanced

# 配置

config.js:

markdown: {
  ...
    extendMarkdown: (md) => {
      ...
      md.use(require("markdown-it-vuepress-code-snippet-enhanced"));
    },
  },

新建与 docs 同级的 code 文件夹

2020-04-22-12-08-36

# 基础使用

使用以下语法将代码段导入到 Markdown 文件中:(语句上下都应该留空白行)

@[code](@/code/uva/uva-272.cpp/)
@[code lang=cpp](@/code/uva/uva-272.cpp/)

@[code](@/code/uva/uva-272.cpp/) 如下的渲染效果:

Not Found: /github/workspace/code/uva/uva-272.cpp/

# 添加高亮

lang=cpp 来高亮代码块后

@[code lang=cpp](@/code/uva/uva-272.cpp/) 如下的渲染效果:

Not Found: /github/workspace/code/uva/uva-272.cpp/

# 指定行添加额外高亮

@[code highlight={1-6} lang=cpp](@/code/uva/uva-272.cpp/)

 
Not Found: /github/workspace/code/uva/uva-272.cpp/

# 引入部分代码块

可以使用 transcludetranscludeWithtranscludeTag 来包含文件的一个或多个部分。

# transcludeWith

可以使用相应语言的注释来包含一部分的代码(例如完整程序中的函数块)

例如用 ::: 包含了 while 循环

所以 @[code lang=cpp transcludeWith=:::](@/code/uva/uva-272.cpp) 渲染效果为:

Not Found: /github/workspace/code/uva/uva-272.cpp

# transclude

手动规定起始行和终止行(不如注释相应代码块方便)

@[code transclude={5-7}](@/code/uva/uva-272.cpp)

渲染效果为

Not Found: /github/workspace/code/uva/uva-272.cpp

# transcludeTag

在 markdown 中引入 Vue 单个文件组件时很有用

@[code transcludeTag=template](@/docs/code.vue)
@[code transcludeTag=script](@/docs/code.vue)
@[code transcludeTag=style](@/docs/code.vue)

例如:

<template>
  <div class="component"></div>
</template>
<script>
export default {
  mounted () {
    alert('yay!')
  }
}
</script> 
<style lang="scss" scoped>
.component {
  display: flex;
}
</style> 

@[code highlight={1-6} transcludeTag=style](@/docs/code.vue)

渲染结果:

<style lang="scss" scoped>
.component {
  display: flex;
}
</style>