Markdown预览编辑器是一款功能强大的工具,支持双向滚动同步,为用户提供流畅的编辑和预览体验。
该项目基于 Vue3 + TypeScript 开发,结合了 monaco-editor 作为代码编辑器,markdown-it 解析Markdown语法。
- 代码高亮:采用
highlight.js实现代码高亮功能。 - 双向滚动同步:支持源码和预览页的双向滚动同步,极大提升了编辑效率。
- 自定义渲染器:支持开发者传入基于
markdown-it的自定义渲染器。
该工具适用于需要实时预览Markdown效果的场景,如博客写作、文档编写等。
该项目基于 kaciras-blog/markdown 并在其基础上进行了优化和改进,感谢原作者的贡献!🎉🎉🎉
pnpm i markdown-editor-previewimport { MarkdownEditor } from "markdown-editor-preview";
// style.css样式表包含了编辑器和预览的样式
import "markdown-editor-preview/style.css";<template>
<div class="container">
<MarkdownEditor
v-model='content'
renderer='rich'
>
</MarkdownEditor>
</div>
</template>
<script setup lang='ts'>
import { ref } from "vue";
import { MarkdownEditor } from "markdown-editor-preview";
import "markdown-editor-preview/style.css"
const content = ref("# Hello Markdown-Editor-Preview!");
</script>
<style scoped>
.container {
height: 100vh;
}
</style>完整的Markdown编辑器组件,包含编辑器和预览区域。
import { MarkdownEditor } from "markdown-editor-preview";
import "markdown-editor-preview/style.css";| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| v-model | string | 编辑器内容 | |
| renderer | Renderer | rich | 渲染器类型,可选值为 'rich' 或 'guest' 也可以为 MarkdownIt 的实例 |
| debounce | number | 500 | 渲染函数的防抖(毫秒) |
| scrollSynced | boolean | true | 是否同步滚动 |
库内置了两种预设渲染器:
rich:默认渲染器,提供完整的 Markdown 渲染功能guest:访客模式渲染器,适用于用户生成内容场景,具有更严格的安全限制
| 名称 | 类型 | 说明 |
|---|---|---|
| editor | MonacoEditor | 编辑器实例 |
| selection | Object | 编辑器选区对象 |
| getHTML | Function | 获取渲染后的HTML内容 |
Markdown预览组件,用于将Markdown文本渲染为HTML。
import { MarkdownView } from "markdown-editor-preview";
import "markdown-editor-preview/style.css";| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| value | string | 要渲染的 Markdown 文本,转换过程是同步的 | |
| renderer | Renderer | 'guest' | 渲染器类型,可选值为 'rich' 或 'guest' 也可以为 MarkdownIt 的实例 |
| docId | string | 设置唯一 ID,用于区分锚点 |
| 名称 | 类型 | 说明 |
|---|---|---|
| getHTML | Function | 获取渲染后的HTML内容 |
markdown-editor-preview 导出了 MarkdownIt 类,这是整个库的核心渲染引擎,用于将 Markdown 文本转换为 HTML。
import { MarkdownIt } from "markdown-editor-preview";
// 创建 MarkdownIt 实例
const md = new MarkdownIt({
html: true, // 启用 HTML 标签
linkify: true, // 自动将 URL 转换为链接
typographer: true // 启用一些语言中立的替换和引号美化
});
// 渲染 Markdown 文本
const html = md.render('# Hello World');sourceLine 是一个用于标注原文行号信息的 MarkdownIt 插件,主要用于实现编辑器和预览区域的双向滚动同步功能。
当您需要自定义 MarkdownIt 渲染器并保持滚动同步功能时,可以使用此插件
import { sourceLine, MarkdownIt } from "markdown-editor-preview";
// 创建 MarkdownIt 实例
const md = new MarkdownIt();
// 使用 sourceLine 插件
md.use(sourceLine);- 给块语法渲染的结果中添加原文行号信息,用于定位哪一行渲染出了哪个元素
- 为实现编辑器和预览区域的双向滚动同步提供基础支持
- 在渲染的 HTML 元素上添加
data-line属性,格式为start,end,表示该元素对应的原始 Markdown 文本的起始和结束行号