社区 API Demo 成为赞助者
相关 API: Vditor.preview(),Vditor.outlineRender()

教程

这是一篇讲解如何正确使用 Markdown 的排版示例,学会这个很有必要,能让你的文章有更佳清晰的排版。

引用文本:Markdown is a text formatting syntax inspired

语法指导

普通内容

这段内容展示了在内容里面一些排版格式,比如:

提及用户

@Vanessa 通过 @User 可以在内容中提及用户,被提及的用户将会收到系统通知。

NOTE:

  1. @用户名之后需要有一个空格
  2. 新手没有艾特的功能权限

表情符号 Emoji

支持大部分标准的表情符号,可使用输入法直接输入,也可手动输入字符格式。通过输入 : 触发自动完成,可在个人设置中设置常用表情

一些表情例子

😄 😆 😵 😭 😰 😅 😢 😤 😍 😌
👍 👎 💯 👏 🔔 🎁 ❓ 💣 ❤️ ☕️ 🌀 🙇 💋 🙏 💢

大标题 - Heading 3

你可以选择使用 H1 至 H6,使用 ##(N) 打头。建议帖子或回帖中的顶级标题使用 Heading 3,不要使用 1 或 2,因为 1 是系统站点级,2 是帖子标题级。

NOTE: 别忘了 # 后面需要有空格!

Heading 4

Heading 5
Heading 6

图片

![alt 文本](http://image-path.png) ![alt 文本](http://image-path.png "图片 Title 值")

支持复制粘贴直接上传。

代码块

普通

*emphasize* **strong** _emphasize_ __strong__ var a = 1

语法高亮支持

如果在 ``` 后面跟随语言名称,可以有语法高亮的效果哦,比如:

演示 Go 代码高亮
package main import "fmt" func main() { fmt.Println("Hello, 世界") }
演示 Java 高亮
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }

Tip: 语言名称支持下面这些: ruby, python, js, html, erb, css, coffee, bash, json, yml, xml ...

有序、无序、任务列表

无序列表

有序列表

  1. Node.js
    1. Express
    2. Koa
    3. Sails
  2. Go
    1. gofmt
    2. Wide
  3. Java
    1. Latke
    2. IDEA

任务列表

表格

如果需要展示数据什么的,可以选择使用表格。

header 1 header 2
cell 1 cell 2
cell 3 cell 4
cell 5 cell 6

隐藏细节

这里是摘要部分。 这里是细节部分。

段落

空行可以将内容进行分段,便于阅读。(这是第一段)

使用空行在 Markdown 排版中相当重要。(这是第二段)

链接引用

链接文本

[链接文本][链接标识] [链接标识]: https://b3log.org

数学公式

多行公式块:

行内公式:

公式 是行内。

脑图

流程图

three
two
one
c2
c1
b2
b1
a2
a1

时序图

AliceJohnloop[Every minute]Hello John, how are you?Great!AliceJohn

甘特图

A Gantt Diagram2019-01-062019-01-132019-01-202019-01-272019-02-032019-02-102019-02-17A task Task in sec another task Another task SectionAnotherA Gantt Diagram

图表

五线谱

Sheet Music for "Clouds Thicken"Clouds ThickenCreepy JigPaul Rosen= 116EmC7EmC7B7EmC7EmD (Bm7)EmEmEm2GEmDEmGEmDEmSource: Copyright 2005, Paul Rosen

Graphviz

digraph finite_state_machine { rankdir=LR; size="8,5" node [shape = doublecircle]; S; node [shape = point ]; qi node [shape = circle]; qi -> S; S -> q1 [ label = "a" ]; S -> S [ label = "a" ]; q1 -> S [ label = "a" ]; q1 -> q2 [ label = "ddb" ]; q2 -> q1 [ label = "b" ]; q2 -> q2 [ label = "b" ]; }

多媒体

支持 v.qq.com,youtube.com,youku.com,coub.com,facebook.com/video,dailymotion.com,.mp4,.m4v,.ogg,.ogv,.webm,.mp3,.wav 链接解析

脚注

这里是一个脚注引用1,这里是另一个脚注引用2

这里是一个脚注引用[^1],这里是另一个脚注引用[^bignote]。 [^1]: 第一个脚注定义。 [^bignote]: 脚注定义可使用多段内容。 缩进对齐的段落包含在这个脚注定义内。 ``` 可以使用代码块。 ``` 还有其他行级排版语法,比如**加粗**和[链接](https://b3log.org)。

快捷键

我们的编辑器支持很多快捷键,具体请参考 键盘快捷键


  1. 第一个脚注定义。

  2. 脚注定义可使用多段内容。

    缩进对齐的段落包含在这个脚注定义内。

    可以使用代码块。

    还有其他行级排版语法,比如加粗链接

const initOutline = () => { const headingElements = [] Array.from(document.getElementById('preview').children).forEach((item) => { if (item.tagName.length === 2 && item.tagName !== 'HR' && item.tagName.indexOf('H') === 0) { headingElements.push(item) } }) let toc = [] window.addEventListener('scroll', () => { const scrollTop = window.scrollY toc = [] headingElements.forEach((item) => { toc.push({ id: item.id, offsetTop: item.offsetTop, }) }) const currentElement = document.querySelector('.vditor-outline__item--current') for (let i = 0, iMax = toc.length; i < iMax; i++) { if (scrollTop < toc[i].offsetTop - 30) { if (currentElement) { currentElement.classList.remove('vditor-outline__item--current') } let index = i > 0 ? i - 1 : 0 document.querySelector('span[data-target-id="' + toc[index].id + '"]').classList.add('vditor-outline__item--current') break } } }) } fetch('markdown/zh_CN.md'). then(response => response.text()). then(markdown => { Vditor.preview(document.getElementById('preview'), markdown, { speech: { enable: true, }, anchor: 1, after () { if (window.innerWidth <= 768) { return } const outlineElement = document.getElementById('outline') Vditor.outlineRender(document.getElementById('preview'), outlineElement) if (outlineElement.innerText.trim() !== '') { outlineElement.style.display = 'block' initOutline() } }, }) })

参与讨论