Markdown Extensions
Links
Internal links are converted to <router-link>
for SPA navigation. Also, every README.md
or index.md
contained in each sub-directory will automatically be converted to index.html
, with corresponding URL /
.
Given the following directory structure:
And providing you are in foo/one.md
:
[Home](/) <!-- Sends the user to the root README.md -->
[foo](/foo/) <!-- Sends the user to index.html of directory foo -->
[foo heading](./#heading) <!-- Anchors user to a heading in the foo README file -->
[bar - three](../bar/three.md) <!-- You can append .md (recommended) -->
[bar - four](../bar/four.html) <!-- Or you can append .html -->
VuePress supports redirecting to clean links. If a link /foo
is not found, VuePress will look for a existing /foo/
or /foo.html
. Conversely, when one of /foo/
or /foo.html
is not found, VuePress will also try the other. With this feature, we can customize your website’s URLs with the official plugin .
TIP
Regardless of whether the permalink and clean-urls plugins are used, your relative path should be defined by the current file structure. In the above example, even though you set the path of /foo/one.md
to /foo/one/
, you should still access /foo/two.md
via ./two.md
.
Outbound links automatically gets target="_blank" rel="noopener noreferrer"
:
You can customize the attributes added to external links by setting config.markdown.externalLinks.
Frontmatter
YAML frontmatter is supported out of the box:
---
title: Blogging Like a Hacker
lang: en-US
---
This data will be available to the rest of the page, along with all custom and theming components.
For more details, check out the page.
GitHub-Style Tables
Input
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
Output
Input
:tada: :100:
Output
🎉 💯
Table of Contents
Input
[[toc]]
Output
- Header Anchors
- GitHub-Style Tables
- Custom Containers default theme
- Line Highlighting in Code Blocks
- Import Code Snippets beta
Rendering of TOC can be configured using the markdown.toc
option.
Custom Containers default theme
Input
::: tip
This is a tip
:::
This is a warning
:::
::: danger
This is a dangerous warning
:::
::: details
This is a details block, which does not work in IE / Edge
:::
Output
TIP
This is a tip
WARNING
This is a warning
WARNING
This is a dangerous warning
This is a details block, which does not work in IE / Edge
You can also customize the title of the block:
STOP
Danger zone, do not proceed
Click me to view the code
console.log('Hello, VuePress!')
Syntax Highlighting in Code Blocks
VuePress uses Prism to highlight language syntax in Markdown code blocks, using coloured text. Prism supports a wide variety of programming languages. All you need to do is append a valid language alias to the beginning backticks for the code block:
Input
``` js
export default {
name: 'MyComponent',
// ...
}
```
Output
export default {
name: 'MyComponent',
// ...
}
Input
``` html
<ul>
<li
v-for="todo in todos"
:key="todo.id"
>
{{ todo.text }}
</li>
```
Output
<ul>
<li
v-for="todo in todos"
:key="todo.id"
>
{{ todo.text }}
</ul>
Check out on the Prism site.
Input
``` js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
Output
Line Numbers
You can enable line numbers for each code blocks via config:
module.exports = {
markdown: {
lineNumbers: true
}
}
- Demo:
Import Code Snippets beta
You can import code snippets from existing files via following syntax:
<<< @/filepath
It also supports line highlighting:
<<< @/filepath{highlightLines}
Input
<<< @/../@vuepress/markdown/__tests__/fragments/snippet.js{2}
Output
export default function () {
// ..
}
TIP
Since the import of the code snippets will be executed before webpack compilation, you can’t use the path alias in webpack. The default value of @
is process.cwd()
.
Advanced Configuration
VuePress uses markdown-it as the Markdown renderer. A lot of the extensions above are implemented via custom plugins. You can further customize the markdown-it
instance using the markdown
option in .vuepress/config.js
:
module.exports = {
markdown: {
// options for markdown-it-anchor
anchor: { permalink: false },
// options for markdown-it-toc
toc: { includeLevel: [1, 2] },
extendMarkdown: md => {
// use more markdown-it plugins!
md.use(require('markdown-it-xxx'))
}
}