Markdown
文本在线 Markdown 编辑与实时预览
Markdown 的好处是纯文本、可版本控制、写的时候不用分心排版,代价是写和看是分开的——不渲染一次,你不知道那张表格的竖线对齐了没有,也不知道代码块的反引号是不是少打了一个。装编辑器插件当然可以,但临时改一段说明、在别人的电脑上写点东西时,往往还是打开网页最快。
这个页面就是一块最朴素的编辑板:左边写,右边即时出效果,中间没有保存或渲染按钮。语法上启用了 GFM,表格、任务列表、删除线、围栏代码块都能正常渲染;同时打开了 breaks,敲一个回车就换行,不必像标准 CommonMark 那样处处空行——这更符合大多数人写中文的直觉,但如果稿子最终要发到严格遵循 CommonMark 的平台,还是建议用空行分段。
写完之后有两条出路。「复制 Markdown」拿回源码,适合存档或换台机器接着写;「复制 HTML」拿到渲染后的正文片段,可以直接粘进公司后台的富文本编辑器、邮件正文或 CMS 里,省掉一次手动排版。要注意复制出来的是片段而非完整网页,也不带样式,颜色和边框都来自本站的 CSS,换个环境需要自己配。
渲染链路上做了两件保守的事。一是全部在浏览器里跑,marked 和 DOMPurify 随页面加载完成后就不再需要网络,草稿只缓存在你自己的 localStorage,不经过任何服务器;二是渲染结果统一过一遍消毒,内嵌 HTML 里的脚本标签和事件属性会被剥掉,所以从网上抄一段带 HTML 的 Markdown 贴进来预览,不用担心它在页面里执行什么东西。
不支持的部分也说明白:没有语法高亮、没有 LaTeX 公式、没有 mermaid 流程图,也没有 PDF 导出按钮。要 PDF 就切到「仅预览」后用浏览器打印另存,要高亮就把 HTML 拿回自己的项目里接高亮库,代码块上的语言 class 名是保留的。
功能一览
- 实时预览:输入即渲染,不需要点任何按钮,右栏同步显示排版后的效果
- GFM 语法:支持表格、删除线、任务列表、围栏代码块、引用块与多级标题
- 单换行即换行:启用了 breaks 选项,敲一个回车就换行,贴近国内常见写作工具的习惯
- 三种布局:分栏、仅编辑、仅预览随时切换,写长文时切到仅编辑更专注,通读时切到仅预览
- 复制 HTML:把渲染后的 HTML 片段送进剪贴板,可直接粘到后台富文本编辑器或邮件里
- 复制 Markdown:取回源码,方便在设备之间转移草稿或存档
- 插入示例:填入一段覆盖常用语法的样例,已有内容时追加在末尾而不会覆盖
- 消毒渲染:结果经 DOMPurify 过滤,script 标签与事件属性会被移除,粘贴来路不明的内容也安全
常见问题
- 编写的内容会上传服务器吗?
- 不会。Markdown 解析用 marked、消毒用 DOMPurify,两者都是随页面下载到浏览器里执行的,编辑内容不会发往任何接口,页面加载后断网也能继续写。源码和当前布局模式会存进浏览器 localStorage,刷新页面或下次打开还在,点「清空」即删除。适合起草含内部信息的技术文档或周报。
- 预览里的代码块为什么没有语法高亮?
- 本页只负责 Markdown 到 HTML 的转换与排版,没有引入语法高亮库,围栏代码块会以等宽字体加浅灰底展示,但不会给关键字上色。如果你需要高亮,把「复制 HTML」的结果粘到自己的页面里,再接入 highlight.js 或 Prism 即可,代码块上标识语言的 class 名会被保留下来,高亮库能直接识别。
- 支持数学公式、流程图或内嵌 HTML 吗?
- 不支持 LaTeX 公式和 mermaid 流程图,这类语法会被当成普通文本原样输出。Markdown 里内嵌的原生 HTML 会被渲染,但要先过 DOMPurify 这一关,script 标签、以 on 开头的事件属性以及伪协议链接都会被移除,图片、表格、链接等常规标签保留。这样做是为了避免粘贴外来内容时触发脚本。
- 「复制 HTML」复制出来的是完整网页吗?
- 是正文片段,只包含 h1、p、ul、table 这类标签,不含 html、head、body 外层结构,也不含任何 CSS。预览区看到的字号、表格边框和代码块底色都来自本站样式表,粘到别处后需要自己配样式。如果只是想把原文搬走,用「复制 Markdown」。两个复制都依赖浏览器剪贴板权限,被拒绝时页面会给出失败提示。
- 能导出 PDF 或图片吗?
- 页面没有内置导出功能。需要 PDF 时,先切到「仅预览」模式,再用浏览器打印功能(Windows 按 Ctrl+P,macOS 按 Cmd+P)另存为 PDF,排版与预览区基本一致。需要图片就用系统截图工具。若要产出正式文档,更稳妥的做法是复制 Markdown 源码,用 Pandoc 一类的本地工具转换。
- 单个回车就换行,会不会和标准 Markdown 不一致?
- 确实有区别。标准 CommonMark 里单个换行只当作空格,要空一行才分段;本页启用了 breaks 选项,一个回车就渲染成换行,这更贴近多数中文写作习惯。如果内容最终要发到严格遵循 CommonMark 的平台,请老老实实用空行分段,不要依赖单换行的效果,否则两边显示会不一样。