简介面向习惯用 Notepad 编写文档的开发者、运维与测试人员这套 Markdown 支持组件用于补齐编辑器原生缺失的语法高亮与实时预览能力让技术文档、README 与日常笔记在同一窗口内完成编写和校对。压缩包内共 2 个文件体积约 228KB主体为一个 dll 插件核心和一个 xml 用户自定义语言配色配置前者承担 Markdown 的解析与渲染加载后即可从插件菜单调出预览入口后者配合 Zenburn 暗色方案为标题、列表、代码块等元素分配不同颜色减轻长文档的视觉疲劳。目前已有 1839 人学习。对于想轻量上手 Markdown、又不愿额外安装独立编辑器的读者这份组件可直接嵌入既有工作流兼顾编辑效率与阅读体验也便于按个人习惯调整高亮与预览设置。1. Notepad 写 Markdown 的盲区预览缺失带来的返工上周改一份三百行的部署说明表格列宽全靠数竖线图片写成在 Notepad 里看着整整齐齐粘到别处一渲染表格塌成一堆竖杠图全裂了。问题不在手写 Markdown 的水平在于编辑器不给反馈Notepad 本质是文本编辑器Markdown 的排版效果它不知道也不负责显示。装一个预览插件把「写完才知道坏了」提前成「写着就看见坏了」这就是全部价值。我自己常用的是 MarkdownViewer,它能在侧边或独立窗口实时渲染当前文件允许指定自定义 CSS还能把渲染结果导出成 HTML。适合把 Notepad 当主力编辑器、又经常写 README、接口文档、配置说明的人不适合想要所见即所得、拖拽排版的人那类需求该换编辑器不该给 Notepad 加插件。2. 装 MarkdownViewer三条安装路径与目录结构的硬规则2.1 三条路线的取舍高亮、预览、外部渲染在动手之前先把选项摊开。很多人以为 Notepad 装了 Markdown 插件就什么都有了实际上「语法着色」和「渲染预览」是两套独立机制互不替代。方案装什么得到什么代价只做高亮导入 Markdown 的 UDL 词法文件标题、加粗、代码块有颜色看不到任何排版效果MarkdownViewer插件本体DLL实时预览、自定义 CSS、导出 HTML渲染内核受限少数 CSS 不生效外部渲染pandoc 浏览器最接近最终发布效果要切窗口、手动跑命令反馈慢写文档过程中需要的是「扫一眼对不对」不是「出版级还原」。所以预览延迟和面板占位比渲染精度更重要这也是我优先装 MarkdownViewer 而不是每次切浏览器刷新的原因。真要出版级效果第 4 章用 pandoc 做兜底导出两者不冲突。2.2 在线装Plugins Admin 的正确用法Notepad 8.x 自带插件管理入口路径是「插件 → Plugins Admin插件管理」。打开后有个可搜索的列表检索 markdown勾选 MarkdownViewer点 Install编辑器会自动关闭并重启。整个过程不需要手动找文件。几个容易被忽略的点7.5 之前的版本用的是老的 Plugin Manager界面和列表源都不一样网上教程对不上号时先看自己的版本号帮助 → 关于。公司网络或内网环境经常连不上插件列表源表现为列表空白或一直转圈这时候走 2.3 的离线路线别在原地反复点。装完必须让它自己重启一次手动关掉再开有时插件注册表没写完菜单里就是不出现。提示在线安装成功不代表版本匹配装完务必做 2.4 的验证。2.3 离线装plugins 目录结构是硬规则从 Notepad 7.6 开始插件不再允许把 DLL 直接扔进plugins根目录必须是「每个插件一个同名子目录DLL 放在里面」Notepad/ └── plugins/ └── MarkdownViewer/ ├── MarkdownViewer.dll └── (依赖的 dll)放错层级的典型后果是菜单里找不到插件也没有任何报错静悄悄失败。这是新手最容易翻车的地方,血泪经验是——只放了一个 DLL 到根目录然后怀疑插件坏了重装了三次编辑器。下面这段 PowerShell 用来核对安装结果同时暴露目录层级问题# 按实际安装路径改32 位在 64 位系统上一般是 ${env:ProgramFiles(x86)} $npp C:\Program Files\Notepad # 1. 先确认编辑器版本和位数关于对话框里也能看这里拿文件版本做交叉验证 (Get-Item $npp\notepad.exe).VersionInfo | Select-Object FileVersion, ProductVersion # 2. 只列 plugins 下的子目录如果插件 DLL 直接躺在根目录这里看不到它 Get-ChildItem $npp\plugins -Directory | ForEach-Object { Get-ChildItem $_.FullName -Filter *.dll -Recurse | Select-Object {nPlugin;e{$_.Directory.Name}}, Name, {nDllVersion;e{$_.VersionInfo.FileVersion}} }逻辑说明第一条命令读 exe 的版本信息用来对齐插件和编辑器版本第二条只枚举目录是因为 7.6 的加载器只认子目录结构这个写法本身就能验证结构对不对。参数上把$npp改成你的实际路径即可便携版指向解压目录。如果第二条命令的输出里压根没有 MarkdownViewer说明文件位置错了先别怀疑 DLL 损坏。2.4 装完先做三件事验证看菜单「插件」菜单下应该出现 MarkdownViewer 子项包含预览开关。新建test.md,写一个二级标题、一张两列三行的表、一段围栏代码块打开预览看是否渲染出结构。关掉编辑器再开看预览面板位置和自定义 CSS 是否还在以此判断配置有没有落到磁盘。配置文件位置随安装形态变化找不到配置时按这张表定位安装形态配置目录安装版%APPDATA%\Notepad\plugins\config便携版解压目录下.\config或.\plugins\config3. 预览链路拆解解析器、CSS 注入与图片基准路径3.1 从编辑器缓冲区到 HTML 的四步理解这条链路后面所有异常都能自己定位。点击预览时大致发生四件事第一步插件从编辑器取出当前缓冲区内容注意是缓冲区不是磁盘文件所以没保存也能预览这一点比很多人想的方便第二步交给内置的 Markdown 解析器转成 HTML不同版本底层库换过想确认的话去看插件目录里的依赖 DLL 名字看到 Markdig 这类库名就说明走的是对应解析器第三步套一个 HTML 模板把你指定的 CSS 注入进去第四步把结果塞进插件内置的浏览器控件渲染。关键结论在第四步预览用的是嵌入的浏览器控件不是系统浏览器。常见情况是该控件内核偏老对 flex、grid、gap这类较新的 CSS 支持不完整于是出现「预览里排版崩了、导出到网页却正常」的假象。看到这类现象不要回头改 Markdown先判断是内核问题还是写法问题——把可疑样式单独抽一个小 HTML 丢进系统浏览器对比一次就能定论。3.2 自定义 CSS把预览面板调到能看默认样式通常字小、行距紧、表格没有分隔感长时间看很累。插件设置里可以指定一个外部 CSS 文件路径改完重新打开预览面板生效。/* preview.css —— 只做可读性调整不追求好看 */ /* 中文字体优先行高给足长文档才不挤 */ body { font-family: Microsoft YaHei, PingFang SC, system-ui, sans-serif; font-size: 15px; line-height: 1.75; max-width: 900px; /* 面板很宽时限制行宽避免一行横跨整个屏幕 */ padding: 16px 24px; } /* 表格斑马纹 细边框行列多的时候不容易看串行 */ table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #d0d7de; padding: 6px 10px; } tbody tr:nth-child(even) { background: #f6f8fa; } /* 行内代码和代码块分开处理混用会很难看 */ code { background: #f0f2f5; padding: 1px 4px; border-radius: 3px; font-size: 13px; } pre { background: #f6f8fa; padding: 12px; overflow-x: auto; border-radius: 4px; } pre code { background: none; padding: 0; } /* 引用块用左边框比整块底色克制 */ blockquote { margin: 12px 0; padding: 4px 12px; border-left: 3px solid #d0d7de; color: #555; } /* 图片不溢出面板这一条能省掉大量横向滚动 */ img { max-width: 100%; }参数说明max-width控制正文行宽面板宽度变化时它才是决定阅读舒适度的量pre的overflow-x: auto让超长代码行局部滚动而不是撑破布局img的max-width: 100%是必加项否则一张大图能把整个面板横向拉爆。若你的样式被内置样式压住用!important兜底但只对确实不生效的那一条用,全篇铺开以后很难维护。3.3 图片为什么在预览里裂开这是最高频的疑问。原因在于浏览器控件需要知道「相对路径相对于谁」而插件渲染时页面并不真的位于你的 md 文件目录基准路径常常是临时目录或插件目录于是img/arch.png找不到。按这个顺序排查基本一次能定位文件是否已保存到磁盘。新文件没路径相对路径无解先 CtrlS。相对路径写法统一。和在不同版本里行为可能不一致建议全篇统一不带./。用绝对路径做对照实验。临时把一张图改成能显示说明是路径基准问题不能显示说明是文件本身不存在或格式不支持。路径里有中文和空格时优先重命名目录。编码问题在控件里表现得很玄学能避就避。注意预览显示正常不等于发布后正常图片路径这类问题必须用最终渲染器再验一次。3.4 编码UTF-8 无 BOM 是底线编码问题有两个典型症状。第一个是第一个#标题不渲染反而在正文里显示成一段带点的文字原因是文件存成了 UTF-8 with BOM,解析器把 BOM 当成正文的第一个字符行首不再是#,标题语法就失效了。第二个是中文全变问号或方块那是存成了 ANSI。处理方式很直接在 Notepad 的「编码」菜单里选「转为 UTF-8」不带 BOM保存。养成习惯后可以避免九成的乱码问题。判断当前状态看右下角状态栏它会显示 UTF-8 或 ANSI。批量处理一堆老文件时用「在文件中查找」配合编码转换更稳别一个个手点。4. 把写作流程补齐UDL 高亮、自动完成与 pandoc 兜底导出4.1 UDL 词法高亮只管着色不管渲染Notepad 原生并不带完整的 Markdown 词法语言菜单里没有 Markdown 选项时靠导入 UDL用户自定义语言补上。路径是「语言 → 自定义语言 → 导入」选一个 UDL XML 文件导入后语言菜单末尾会多出一项给.md文件套上即可。需要说清楚的是UDL 只负责把标题、加粗、代码围栏染上颜色它和预览插件是两条独立的链路互不影响。装了 UDL 但没装插件你只有颜色没有预览装了插件没装 UDL,你只有预览没有颜色。两者都装才算顺手。UDL 文件不必自己从零写长度动辄上百行结构上分词法类型和关键字分组两块。自己改的时候最容易改坏的是文件扩展名关联和「前缀模式」开关——Markdown 的#是行首标记而非独立单词不开前缀模式就染不上色。4.2 自动完成用 XML 补常用片段#标题、表格竖线、任务列表这类东西重复度极高靠自动完成能省不少敲键。Notepad 的自动完成配置放在安装目录的autoCompletion文件夹下文件名必须和语言名逐字一致否则静默不生效——这是最容易踩的坑。?xml version1.0 encodingUTF-8? NotepadPlus !-- language 必须与「语言」菜单里显示的名字完全一致 -- AutoComplete languagemarkdown Environment ignoreCaseno startFunc( stopFunc) paramSeparator, terminal;/ !-- 只放高频、单行的片段多行骨架交给宏处理 -- KeyWord namepython / KeyWord namebash / KeyWord name- [ ] / KeyWord name- [x] / KeyWord name 注意 / KeyWord name 提示 / KeyWord name 形式忽略带 title 的写法够用 IMG re.compile(r!\[[^\]]*\]\(([^)\s])) root pathlib.Path(sys.argv[1] if len(sys.argv) 1 else .) missing 0 for md in root.rglob(*.md): text md.read_text(encodingutf-8, errorsignore) for m in IMG.finditer(text): src m.group(1) if src.startswith((http://, https://, data:)): continue # 外链和内联图跳过 target (md.parent / src).resolve() if not target.exists(): missing 1 print(f{md} - 缺失 {src}) print(f缺失总数: {missing})逻辑说明rglob(*.md)递归扫描指定根目录相对路径按 md 文件自身所在目录解析这跟大多数渲染器的行为一致http、https、data:开头的直接跳过避免误报errorsignore是为了让个别编码不规范的老文件也能被扫到而不是中断。用法就是python check_img.py docs,输出为空即通过。这个脚本只有二十来行但省掉过我至少两次当场返工。除了脚本交付前我还会过四条验收线检查项通过标准为什么必须查表格结构前后有空行分隔行列数对齐预览容错、发布环境不容错标题层级从##起逐级不跳自动生成目录时会错乱代码围栏每个围栏都带语言标识无标识时高亮失效图片路径脚本输出为空最常见也最丢人的问题最后说个习惯。以前我信任「预览没问题就是没问题」,直到一次把文档发出去对方打开全是裂图才发现预览里的图走的是本地绝对路径。从那以后我每次交付前都强制走一遍这个脚本加一次 pandoc 导出两个结果都对得上才敢发。插件在 Plugins Admin 里搜 MarkdownViewer 直接装内网装不了就去取对应位数的离线包按目录结构放好剩下的交给上面这几步。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?