先问一个问题:你电脑里是不是已经装了四五个 Markdown 编辑器,真正想写文档时,却还是觉得哪个都不顺手?
这不是你挑剔,而是大部分“本地写 MD 的工具”只解决了输入问题,没解决写作问题。你想要的不是一个能识别 .md 后缀的文本框,而是一个可以让你专注内容、同时又能搞定图片、目录、导出、备份的完整工作流。
这篇文章想聊清楚一件事:什么样的本地 MD 工具组合,才配得上技术写作这件事。 我会从选型逻辑、工具对比、环境配置、写作工作流、常见排错几个角度展开。文章较长,建议先收藏,等真正需要搭环境时直接照着操作。
1. 本地写 MD 的真正痛点是什么
过去几年,Markdown 从程序员的小众偏好,变成了技术写作的默认格式。CSDN、GitHub、知乎、Notion、飞书文档,都在直接或间接支持 Markdown。很多人也开始把手头的技术笔记、博客草稿、项目文档从 Word 往 Markdown 迁移。
但迁移过程中,问题很具体。
第一个痛点是数据归属。在线编辑器虽然方便,但文章保存在别人服务器里,想全局搜索只能搜自己的某个账号,想备份只能手动导出。对很多技术人来说,文档是资产,不是流量工具。资产放在自己硬盘里,心里才踏实。
第二个痛点是环境切换成本。白天在公司写技术方案,晚上回家写博客,可能一台 Windows 一台 Mac,工具不统一就意味着样式不一致、快捷键不一致、导出效果不一致。最后往往变成“在哪里写的,只能在哪里改”。
第三个痛点是图片处理。这是最容易被低估的坑。文档稍微长一点,截图就会变成一堆随机命名的 image-20250212-xxxx.png。如果粘贴到在线编辑器,图片图床还牵扯安全问题;如果保存在本地,目录一旦挪动,图片直接裂掉。
第四个痛点是导出兼容。写完的博客要发到 CSDN,还要导出 PDF 做分享,偶尔还要 HTML 做内部存档。同一个 Markdown 文件,在不同平台渲染出来的代码块样式、表格宽度、标题间距完全不一样。你以为自己在写排版,其实一直在做搬运婆。
所以,判断一款本地 MD 工具好不好用,不能只看它能不能预览。应该看四件事:能不能专注写作,能不能管好图片,能不能稳定导出,能不能长期留存。 这四点都满足,才是真正值得长期使用的写作工具。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 为什么 Markdown 适合技术写作
在讲工具之前,先统一一下基础认知。很多新手对 Markdown 有误解,以为它就是把纯文本加几个 # 符号。这种理解没问题,但太浅了。
Markdown 的本质是以纯文本为载体的轻量标记语言。它不负责排版,它只负责标记结构。你写 # 标题,它告诉你这是一级标题;你写 **加粗**,它告诉渲染器这段文字需要强调。具体显示成什么样子,交给 CSS、渲染器、导出模板去决定。
这种设计对技术写作极其友好,原因有三个。
第一,内容与格式分离。写 Word 时,你经常边打字边调整字号、颜色、缩进,写着写着就开始跟格式搏斗。Markdown 直接把格式选择从写作过程中剥离了,你只需要管结构。这种写法特别适合长时间输出,因为大脑不用频繁切换“内容模式”和“排版模式”。
第二,纯文本是长期兼容的。.md 文件本质是文本文件,随便用哪个操作系统,打开记事本都能看到全部内容。十年后某个编辑器不维护了,你的文件依然可读。Word 文件需要对应版本软件打开,在线文档需要平台还在运营,纯文本没有这些问题。
第三,技术生态完善。Markdown 可以从命令行转 PDF、转 HTML、转 Word,可以配合 Git 做版本管理,可以配合静态博客生成器搭建个人站点,甚至很多 AI 工具的输出格式也是 Markdown。写一次,处处复用,这对技术创作者来说是巨大的效率提升。
当然,Markdown 不是万能的。如果你需要写复杂论文、复杂表格、精细排版,Markdown 的“轻量”就会变成“简陋”。但对绝大多数技术文档、博客、工作笔记来说,它的表达力完全够用。
下面是一个最常用的 Markdown 语法示例,你可以直接复制到一个 .md 文件中测试:
markdown复制# 一级标题:技术笔记示例
## 二级标题:背景
这是一段普通文本,包含 **加粗**、*斜体*、`行内代码`。
### 三级标题:列表
1. 第一步:准备工作
2. 第二步:安装并配置环境
3. 第三步:运行并验证结果
无序列表:
- Markdown 语法
- 本地工具选择
- 导出与备份
### 代码块
```python
def hello(name: str) -> str:
return f"Hello, {name}"
print(hello("CSDN"))
表格
| 工具名称 | 类型 | 适合场景 |
|---|---|---|
| VS Code | 代码编辑器 | 一边写代码一边写文档 |
| Obsidian | 双链笔记 | 长期知识管理 |
| Typora | 所见即所得 | 快速写作与导出 |
提示:引用块在 Markdown 中用于标注注意事项或关键信息。
code复制
这个示例覆盖了标题、列表、代码、表格、引用这些高频语法。把这个文件用任一一款 MD 编辑器打开,你就能直观感受到“纯文本 + 渲染预览”的协作方式。
## 3. 主流本地 MD 工具横向对比
“本地写 MD 的神仙工具”这个标题,准确地说是“我找到了最适合自己的本地 MD 工具组合”。因为不同写作场景,最优解不一样。我们来看几类主流工具。
### 3.1 通用编辑器 + 插件:VS Code
VS Code 本身不是 Markdown 编辑器,但它装上相关插件后,是很多技术写作者的主力。
优点很明显:开源跨平台、插件生态大、代码高亮与日志分析能力强。你在写 API 文档时,左边是代码片段的 Markdown,右边可以同步开一个终端跑测试,不需要切换软件。
缺点是需要自己组装。开箱只有基础预览,图片粘贴、目录生成、导出 PDF 都要靠插件,对新手不够友好。
### 3.2 专业 Markdown 编辑器:Typora
Typora 是“所见即所得”风格的代表。左边没有源码区,你写的 `# 标题` 会直接渲染成标题。对于不习惯“源码预览双栏”的人来说,这是最接近 Word 的 Markdown 工具。
它的导出功能强,可以直接导出 PDF、HTML、Word 等格式,并且支持自定义主题和 CSS。缺点是在版本策略调整后,旧版与新版的细节体验有差异,部分用户也更偏好开源替代品。
### 3.3 知识管理导向:Obsidian
Obsidian 不只是编辑器,更是一套本地知识库。它用“库(Vault)”组织文档,支持双链、标签、关系图谱、插件系统。适合写长期积累的技术笔记,而不是一次性草稿。
它的优势在于:所有数据都是本地 Markdown 文件,不存在被平台锁定的问题;插件丰富,可以通过 community plugins 扩展 Excel 表格、思维导图、看板等功能。缺点是上手成本高,很多能力需要配置才生效,而且过度折腾插件容易让注意力从写作转移到工具本身上。
### 3.4 轻量编辑与快速记录
如果只是记录零碎想法,系统自带的文本编辑器配一个 `.md` 语法高亮也够用。这类方案胜在零依赖、零学习成本,但图片管理、预览、目录等功能都比较弱,不建议作为主力写作方案。
### 3.5 在线协作文档的“本地替代”误区
很多人会把 Notion、语雀这类在线协作文档和本地工具放在一起比。这类产品的优势是团队协作、模板丰富、多端同步,但核心逻辑是“云端为中心”。如果网络差、平台维护或账号失效,文档访问就会受影响。对单机工作流来说,本地工具仍然是更稳妥的底座。
我的判断是:**不要指望一个工具满足所有需求。** 更实际的组合是:
- VS Code 主要负责代码类、技术方案类文档,因为它能同时处理代码和 Markdown。
- Obsidian 负责个人知识库,当作长期积累的“第二大脑”。
- Typora 或同类所见即所得编辑器,用来写需要快速导出成 PDF/Word 的交付物。
三者都读写同一个本地目录,互不冲突。
## 4. 环境准备与安装配置
下面以最常见的组合为例:VS Code 写普通技术文档,Obsidian 做知识库。版本细节会因官方更新而变化,本文的安装思路长期适用。
### 4.1 安装 VS Code
到 Visual Studio Code 官网下载对应安装包,安装后打开。默认已经能渲染 Markdown 预览,但为了做到“像一个专业工具”,推荐几个扩展:
- **Markdown All in One**:自动生成目录、快捷键、列表自动续写、格式化表格。
- **Paste Image**:直接在 Markdown 中粘贴剪贴板图片,保存到指定目录并自动插入引用。
- **markdownlint**:检查 Markdown 语法不规范之处。
- **Markdown Preview Enhanced**:增强预览,支持导出 HTML、PDF、PNG 等,也支持代码块高亮和数学公式。
安装后可以修改用户设置。这里给出一份适用于本地写 MD 的 `settings.json` 配置:
```json
{
"editor.minimap.enabled": false,
"editor.wordWrap": "on",
"editor.renderWhitespace": "all",
"files.eol": "\n",
"pasteImage.path": "${projectRoot}/assets/images",
"pasteImage.namePrefix": "${currentDate}_",
"[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one",
"editor.formatOnSave": true,
"editor.formatOnPaste": true
},
"markdown.preview.breaks": true,
"markdown-preview-enhanced.codeBlockTheme": "github.css"
}
说明:
pasteImage.path让图片自动保存到assets/images,不会散落在文档旁边。[markdown]部分指定 Markdown 文件的格式化和保存行为。markdown.preview.breaks让单换行在预览中也视为换行,更贴合阅读习惯。
保存后,新建一个 .md 文件,把上一节的语法示例粘贴进去,按 Ctrl+Shift+V 或 Cmd+Shift+V 打开预览,就能看到渲染效果。
4.2 安装 Obsidian
从官网下载 Obsidian,双击安装后新建一个 Vault,选择本地目录。不需要注册账号,不需要云同步,所有内容都落在你的硬盘里。
建议把 Vault 目录设置成“一个专门存放笔记的顶层文件夹”,例如 ~/Documents/Notes,而不是直接放在桌面。这样以后做备份、做 Git 版本管理、做多端同步都会方便很多。
Obsidian 里可以关闭“Safe mode”,按需安装社区插件。首次使用建议只装两个:
- Templater:定义常用模板,比如“博客草稿”“会议纪要”“技术复盘”。
- Dataview:用类似查询的语法按标签、日期、路径聚合笔记。
不要一开始就装上几百个插件,工具链越复杂,写作阻力越大。
4.3 安装命令行辅助工具:Pandoc
导出是本地写作工作流中最容易出问题的一环。推荐安装 Pandoc,它是一个文档格式转换工具,可以把 Markdown 转成 HTML、PDF、Word、EPUB 等格式。
macOS 上可以用 Homebrew 安装:
bash复制brew install pandoc
Windows 可以去官网下载安装包,或者用包管理器:
powershell复制choco install pandoc
安装完成后在终端执行:
bash复制pandoc --version
如果输出版本信息,就说明安装成功。后续可以用它完成批量导出。
5. 完整示例:用本地工具搭建一套写作工作流
现在我们用一套具体场景来演示:假设你要写一篇关于“本地部署大模型后如何整理操作笔记”的技术文章,需要包含步骤说明、代码块、截图、参数表格,最后导出发给同事。
5.1 规划目录结构
在开始写内容之前,先规划好目录。一个典型的技术写作目录如下:
text复制local-llm-note/
├── docs/
│ ├── 01-环境准备.md
│ ├── 02-模型下载与安装.md
│ └── 03-验证与排错.md
├── assets/
│ └── images/
│ ├── deploy-20250212-001.png
│ └── deploy-20250212-002.png
└── README.md
这样的结构保证:文档和图片分离,文件名按顺序编号,图片集中在 assets/images 下。后续无论用哪个工具打开,都不会出现“图片找不到”的情况。
5.2 写出第一篇正文
以 01-环境准备.md 为例:
markdown复制# 环境准备
## 检查系统版本
本文基于 Linux 环境演示。执行以下命令确认系统信息:
```bash
cat /etc/os-release
uname -m
安装运行时
下载安装包后,使用默认路径解压:
bash复制tar -xzf runtime-package.tar.gz -C /opt/runtime
export PATH=/opt/runtime/bin:$PATH
验证安装
运行版本命令,输出正常即为成功:
bash复制runtime --version
如果遇到“command not found”,优先检查 PATH 是否包含可执行文件目录。
code复制
这个示例虽然简单,但已经包含了描述、命令、验证方法和排错提示,是一个合格的技术步骤笔记。
### 5.3 使用 Paste Image 管理截图
在 VS Code 中,把光标放在 `01-环境准备.md` 里任意位置,按 `Ctrl+Alt+V` 或通过命令面板执行“Paste Image”,剪贴板截图会自动保存到 `assets/images`,并在当前光标处插入类似这样的引用:
```markdown

注意:不同编辑器对相对路径的处理有差异。VS Code 预览时是相对.md文件所在目录解析的,所以 ../assets/images/... 意味着图片目录在 docs/ 的上一级 assets/ 里。Obsidian 在库内则直接以库根目录为基准,通常写作 assets/images/...。如果你同时用多个工具,建议统一把 assets 和 docs 都放在 Vault 根目录下,这样路径更不容易混乱。
5.4 导出 PDF 与 HTML
写完文章后,用 Typora、VS Code 增强预览插件或 Pandoc 导出。
Pandoc 导出 HTML:
bash复制pandoc docs/01-环境准备.md -s -o output/01-环境准备.html
Pandoc 导出 Word:
bash复制pandoc docs/01-环境准备.md -o output/01-环境准备.docx
Pandoc 导出 PDF 需要额外的 LaTeX 引擎。如果你不想配置 LaTeX,更省事的方式是用 VS Code 的 “Markdown Preview Enhanced” 插件,预览窗口右键选择导出 PDF,它可以借助本地 Chrome 完成渲染,样式保持和预览一致,支持代码高亮。
导出时最容易踩的两个坑:
- 图片路径不对。Markdown 里写的相对路径在
docs目录下能显示,但 Pandoc 从项目根目录执行时,可能解析不到assets/images。遇到这种情况,先把 Markdown 里的图片路径改成相对导出命令执行路径的正确值,或者统一使用绝对路径临时导出。 - 中文字体缺失。导出 PDF 时如果遇到中文乱码,先查系统中是否安装了中文字体,并修改 HTML/CSS 模板中的字体设置。
5.5 用 Git 做版本管理
本地文档和代码一样,应该进入版本管理。进入项目目录:
bash复制cd local-llm-note
git init
git add .
git commit -m "docs: 添加本地部署操作笔记初稿"
后续每次修改后提交一次:
bash复制git add .
git commit -m "docs: 补充常见问题与排错步骤"
想回滚误删内容:
bash复制git log
git checkout <commit_id> -- docs/01-环境准备.md
在这套组合里:
- VS Code 是编辑主力。
- Obsidian 负责检索、双链和长期管理。
- Pandoc 负责格式转换。
- Git 负责历史记录。
这套流程跑通后,你基本不会再为“文档格式”操心了。
6. 运行结果与效果验证
只有装上了工具还不行,重要的是确认每个环节都能正常工作。建议按下面顺序做一次完整验证。
6.1 验证预览与编辑
在 VS Code 中打开 .md 文件,按 Ctrl+Shift+V 打开预览。检查:
- 标题有没有正确分级显示。
- 代码块有没有高亮。
- 表格列是否对齐。
- 图片能否正常显示。
如果图片显示不出来,第一步先检查 Markdown 中的图片路径是否和实际文件位置一致。VS Code 预览中可以直接把鼠标悬停在图片引用上,看解析路径是否正确。
在 Obsidian 中打开同一个 Vault,确认它也能识别这些文件。Obsidian 对 assets 目录下的图片有默认搜索能力,但如果你从 VS Code 新建文件,第一次打开时可能需要等待索引更新。
6.2 验证粘贴图片
复制一张截图,回到 VS Code 中执行 Paste Image。确认:
- 图片文件出现在
assets/images。 - 光标处自动插入了正确的图片引用。
- 预览刷新后图片体积、尺寸正常。
如果粘贴失败,常见原因是 pasteImage.path 配置的目录不存在。VS Code 插件不会自动创建多层目录,建议先手动创建 assets/images,或者使用支持自动创建目录的版本。
6.3 验证导出
用 Pandoc 导出 HTML 后,在浏览器打开它,确认样式渲染正常。再用增强预览插件导出 PDF,打开 PDF 确认中文显示正常、代码没有折行乱码、表格边框完整。
导出内容比较长时,建议分开验证:先导出一小段测试文件,确认样式没问题,再导出完整文章。这样排错成本更低。
6.4 验证 Git 回滚
先提交一版,然后故意修改内容并提交,再执行:
bash复制git log --oneline
git checkout <上一次的commit_id> -- docs/01-环境准备.md
确认文件恢复成功。如果发现 Git 不认得 .md 文件里的中文,检查你的 Git 配置是否设置了 UTF-8 编码支持。Windows 下尤其要注意:
bash复制git config --global core.quotepath false
7. 常见问题与排查思路
下面这些是本地 MD 写作工作流中出现频率最高的问题,整理成一张排查表:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 预览中图片裂开 | 图片路径错误或文件不存在 | 检查 Markdown 图片引用路径与实际文件位置 | 统一使用 assets/images 目录,修正相对路径 |
| 粘贴图片失败 | 插件配置目录不存在 | 查看 VS Code 输出面板中的异常提示 | 手动创建目录,或调整 pasteImage.path |
| 导出的 PDF 中文乱码 | 缺少中文字体或导出模板字体不支持 | 检查系统字体 | 在导出模板 CSS 中指定 "Noto Sans CJK SC" 等字体 |
| 代码块在网页中换行错乱 | 导出模板未开启代码块横向滚动 | 检查 HTML/CSS 模板 | 给代码块添加 overflow-x: auto 样式 |
| Obsidian 中文件很多后搜索变慢 | Vault 内文件庞杂、插件过多 | 打开性能工具观察索引过程 | 减少非必要插件,合理拆分 Vault |
| Windows 下 Git 提交中文字段乱码 | Git 默认字符集设置导致 | 执行 git status 检查输出 |
设置 core.quotepath false,确保文件以 UTF-8 保存 |
| Pandoc 导出 Word 后表格样式丢失 | Pandoc 默认 Word 模板不包含复杂样式 | 查看生成文档的实际样式 | 指定自定义 docx reference 模板,或改用 HTML 中转 |
| 多个工具打开同一文档,相对路径不一致 | 不同工具根目录规则不同 | 确认当前工具解析路径基准 | 尽量统一 Vault 根目录,并在图片引用上使用同一基准 |
另外,有一个比较隐蔽的问题:在同一台电脑上同时安装 Typora、VS Code 和 Obsidian,有时候某一款工具会在打开文件时生成临时文件或修改换行符。建议统一使用 UTF-8 无 BOM 编码,并在 VS Code 设置里固定换行符为 \n,避免跨工具打开时出现“整个文件显示为一行”或者内容被自动格式化的问题。
8. 最佳实践与工程建议
工具选型和配置只是开始,真正决定长期体验的是约定和规范。以下几个建议来自实践中的反复调整,参考价值比较高。
8.1 固定图片管理规范
不管用哪款工具,建议从第一天就固定图片目录。我的推荐是:
- 所有图片放在
assets/images。 - 图片命名使用“日期 + 短描述”格式,例如
20250212-env-check.png。 - 不在
assets里保留无引用图片,每周清理一次。 - 如果图片很多,按文章主题拆分子目录,例如
assets/images/deploy-ollama/。
这样做的价值很快就能体现出来:写博客时可以直接把文章目录复制过去,图片不会丢;导出发给同事时,压缩目录即可。
8.2 把文档纳入 Git 管理
不要只把代码放 Git,文档也应该放。尤其适合以下几类文档:
- 项目的架构设计文档。
- API 接口变更记录。
- 个人技术博客草稿。
- 部署操作的 step-by-step 记录。
被 Git 管理的好处是:可以查看每次修改的原因,可以回滚错误版本,可以多人协作时减少覆盖冲突。对于本地工具,它还能充当一层“文档保险”,即使误删也找得回来。
8.3 控制插件数量,避免“玩工具病”
Obsidian 和 VS Code 的插件生态非常丰富,很容易从一个编辑器变成“时间里消失器”。真正每天高频使用的插件,不超过五个就够。我的标准是:插件必须解决一个真实痛点,并且每周至少用一次。像“自动目录生成”“图片粘贴”“语法检查”“导出 PDF”这类算刚需;其余花哨的功能,等你真的遇到对应场景再装也不迟。
8.4 以“本地优先”为默认原则
对于单机写作,我推荐一个原则:本地优先、云端同步为补充。 所有核心文档先保存在本地,再根据需求选择同步方式。如果使用网盘同步,注意不要同时在两台机器上打开同一个文件编辑,除非你确认网盘已经支持自动冲突处理。否则很容易出现一份文档在两个设备上变成两份副本,最后只剩手动画。
更稳妥的备份策略是“三二一”原则:至少三份副本,使用两种不同存储介质,其中一份放在异地。对大多数人来说,“本地文件 + Git 仓库 + 网盘/移动硬盘”的组合已经够用。
8.5 为不同文档设计模板
写作和编程一样,可以复用模板。推荐准备这样几个 Markdown 模板:
- 技术博客模板,包含元信息(标题、标签、摘要)和固定段落(背景、方案、验证、总结)。
- 项目 README 模板,包含项目简介、环境要求、快速开始、目录结构、常见问题。
- 部署记录模板,包含部署时间、环境、操作步骤、验证命令、回滚方案。
Obsidian 的 Templater 插件可以帮你在新建笔记时自动填充参数。VS Code 的 Snippets 也可以做到。有了模板,写文档的启动成本会大幅下降。
8.6 在文档中明确验证命令
写技术文档时,最容易出现的问题是“写了步骤,但没有验证标准”。一个合格的本地 MD 技术笔记,应该在每一步后附带验证方法。比如“运行 xxx --version,输出 2.1.0 以上即为成功”“打开浏览器访问 http://localhost:8080/health,返回 ok 即为正常”。这不仅方便自己检查,也方便同事和未来的你照着执行。
9. 总结与后续学习方向
本地写 MD 这件事,表面上是选一个编辑器,实际上是搭一套适合个人习惯的写作系统。本文主要讲清楚了几件事:
- Markdown 适合作技术写作的原因在于内容与格式分离、长期兼容、生态成熟。
- 不存在一个“万能神仙工具”,更适合的思路是根据场景组合使用 VS Code、Obsidian、Typora 等工具。
- 一套完整的本地 MD 工作流至少包含编辑、图片管理、预览、导出、版本管理五个环节,其中图片管理和导出最容易被忽略。
- 用 Pandoc、Git、目录规范把工具链串起来,才能真正做到长期可用。
如果你刚开始搭建自己的本地 MD 写作环境,建议从步骤 4 开始照着操作,先用 VS Code 完成一篇 500 字左右的笔记,再逐步把 Obsidian、Pandoc、Git 加进来。不要一步到位,工具链越简单,越容易坚持。
后续还有几个方向值得深入:如果你想发布到 CSDN,可以研究如何用 Markdown 编辑器导出符合平台风格的 HTML;如果你想建立自己的知识库,可以学习 Obsidian 的双链和 Dataview 查询语法;如果你希望文档能自动化处理,可以试试把 Markdown 文件和 GitHub Actions 联动,实现提交即发布。
本地 MD 工具的选择说到底是个人偏好问题,但底层的诉求是一致的:让我们把更多时间留给内容,而不是格式。希望这篇文章能帮你省下一点折腾工具的时间,早点进入真正的写作状态。
