说实话,见到"Markdown学习"这四个字,我一开始是有点犹豫的。这东西被说得太多了,"有手就行"几乎是它的标配评价。但真等自己动手写长文档、插图、贴表格、在不同平台间搬运的时候,才发现到处都是坑。网上搜"markdown换行""markdown图片路径"的人一大把,说明大家不是不会写,是总在某些细节上翻车。
这篇文章我想换个思路:不按教科书那种"什么是Markdown、语法列表、练习题"的老套路来,而是沿着一个新手从零上手、再到进阶折腾的真实路径走。从"编辑器怎么选、文件打不开怎么办"这种最基础的问题,一路聊到表格转Excel、数学公式、流程图、GitHub Callout,甚至用自动化流程把网页存成Markdown、把Markdown转成Word。我不想写成一个语法手册,更想写成一份我自己踩过坑之后整理出来的实操笔记,让你能照着一步步把Markdown真正用起来。
1. 先搞清楚:你学的"Markdown"到底是哪个Markdown
1.1 Markdown不是软件,是一套"用纯文本表达排版"的约定
很多人第一次听到Markdown,以为是某个APP或者编辑器,其实不是。它本质上是一套约定:你只用普通的字符——#、*、-、>、|这些——来告诉电脑"这里是标题、这里是列表、这里是引用"。真正的排版渲染,是另一套工具在显示时完成的。
这套约定的核心好处在于文件本身是纯文本。你用记事本打开一个.md文件,看到的是干干净净的内容,没有一堆隐藏格式符;把它丢进Git里,diff对比起来一目了然;从一个软件搬到另一个软件,内容不会像Word那样莫名其妙乱掉。
理解这一点对你后面学习非常有帮助:你写的Markdown文本永远只有一个版本,但不同软件渲染出的效果可能完全不同。这不是你写错了,而是各家实现方式有差异。最常见的分水岭是CommonMark和GitHub Flavored Markdown(GFM)。CommonMark算是一个基础规范,力求统一各平台的基本语法;GitHub在它之上加了一堆扩展,比如表格、删除线、任务列表、自动URL识别,再加上近两年很火的Callout提示框语法。所以你在一款笔记软件里写好的文档,贴到GitHub上可能显示效果就不一样,原因就在这里。
1.2 给自己定位:你是写博客、写文档,还是记笔记?
动手之前先想清楚使用场景,因为场景决定了你要重点学哪些语法,也决定了工具选型。
- 写技术博客/README:重点要学代码块、行内代码、链接、图片相对路径、表格、任务列表、Callout。发布平台通常是GitHub、博客平台或静态站点工具。
- 写学习笔记:重点可能是标题层级、引述、高亮、待办事项、双链(如果你用Obsidian这类工具)、以及把网页内容剪藏成Markdown的习惯。
- 写带公式的文档(论文、数学笔记):必须搞定数学公式插件和
$、$$的用法。 - 写流程图/架构图:要学Mermaid这类基于文本的画图语法,而不是去画图软件里拖框连线。
我见过不少新手一上来就想着"把所有语法全背下来",结果学完就忘,因为很多语法根本用不上。更合理的方式是:先掌握标题、粗体、斜体、列表、引用、链接、图片、代码、表格这10个基础项,就已经能覆盖80%的日常写作。后面的高级语法,用到再查,查多了自然就熟了。
2. 准备阶段的坑:编辑器怎么选、.md文件怎么打开、装了软件却不显示
2.1 编辑器选型:先给一份阶梯式清单
不要一上来就搜"markdown编辑器下载",然后装一个回来发现不好用,又换下一个。我按使用场景帮你把主流选择理一下,照着挑就行。
| 工具 | 平台 | 特点 | 适合人群 |
|---|---|---|---|
| Typora | Win/macOS/Linux | 所见即所得,输入即渲染 | 追求写作沉浸感的用户,目前收费 |
| Obsidian | Win/macOS/Linux/移动端 | 免费,本地存储,支持双链和插件 | 笔记重度用户、知识管理爱好者 |
| VS Code + 插件 | 多平台 | 通用代码编辑器,Markdown只是其功能之一 | 程序员、写技术文档的人 |
| Sublime Text + 插件 | 多平台 | 轻量、快,但需要自己配插件 | 习惯Sublime的老用户 |
| StackEdit / Dillinger | 浏览器 | 免安装,在线编辑 | 临时用一下、不想装软件的人 |
| Notion/语雀/飞书 | 多平台 | 类Markdown体验,但语法不完全兼容 | 团队协作、企业文档场景 |
我个人最常用的组合是"Obsidian记笔记 + VS Code写技术文档"。Obsidian最大的价值是本地纯文本存储和双链(也就是[[笔记名]]这种写法),笔记之间能互相跳转,适合长期积累。VS Code则是插件生态恐怖,写代码的人本来就用它,顺便把Markdown也写了,不用额外开一个软件。
2.2 .md文件怎么打开:说穿了它就是一个文本文件
这个热搜词背后是大量刚接触Markdown的人共同的困惑:下载了一个README.md,双击却弹出一堆乱码,或者直接选择了错误的应用。
请你记住一个底层事实:.md文件本质就是.txt文件,没有任何特殊编码。所以"打开"这件事,最兜底的方法是用系统自带的文本编辑器:
- Windows:右键 → 打开方式 → 记事本。
- macOS:右键 → 打开方式 → 文本编辑(TextEdit)。
打开后你能看到纯文本内容,只是没有高亮和渲染。想要漂亮的渲染效果,就让专门软件接管.md文件的关联。比如Windows下装了Typora或Obsidian之后,右键.md文件选择"打开方式",再勾选"始终使用此应用打开 .md 文件"即可。macOS同理,在"显示简介"里可以修改默认打开方式。
这里有个很重要的提醒:去官网下载,不要用第三方软件站里的"高速下载"。搜索"markdown下载"时经常能碰上一堆打包了全家桶、捆绑软件的下载站,真正从官网下载反而干净。Typora官网直接下载试用版就能用,但正式使用需要付费授权;Obsidian完全免费且支持中文界面;VS Code则本来就是免费软件。
2.3 装好了却没有渲染效果?检查这几处
很多人装完编辑器后打开.md文件,发现就是白底黑字,以为软件坏了。实际多半是下面几种情况:
- Typora:界面上有四个模式——源码模式、大纲模式、打字机模式、专注模式。如果你切到了"源码模式",当然看不到渲染效果。按
Ctrl+/(macOS是Command+/)可以切换回实时渲染模式。 - VS Code:默认打开文件只是文本视图,需要按
Ctrl+Shift+V调出预览面板,或者Ctrl+K V在侧边开实时预览。推荐装一个叫"Markdown All in One"的插件,它能补齐目录生成、表格格式化、快捷键等功能。 - Sublime Text:本身也不带Markdown渲染,需要装
MarkdownPreview插件。装完后用Ctrl+Shift+P打开命令面板,输入"Markdown Preview"就能在浏览器里预览。别指望Sublime开箱即用,它的定位是轻量编辑器,一切靠配。
小技巧:如果你只是想快速在命令行里瞄一眼Markdown渲染效果,可以用glow这个开源工具,在终端里直接渲染.md文件,非常轻量。
3. 基础语法里最坑的细节:换行、图片路径、代码块
3.1 换行规则:为什么你写的"回车"经常不管用
"markdown换行"这个热搜词能排那么靠前,我一点不意外,因为这是几乎每个新手都会遇到的问题。
你在Markdown里按一下回车,渲染结果里往往并不是一个新起一行,而是变成了一个空格,前后文本挤在同一行。原因很简单:Markdown继承了早期电子邮件纯文本写作的习惯,在设计上,单行回车被当作"这一个逻辑段落还没写完"。想让渲染结果里出现换行,有几种办法:
- 行尾打两个空格再回车——这是Markdown最初的规范写法,算"软换行"。
- 用HTML标签
<br>——这是最直白、最显眼的强制换行,也兼容性最好。 - 空一行另起段落——两个段落之间留一个空行,渲染时会形成段落间距,这也是写长文档时最常用的方式。
这里有个容易踩的坑:在Typora这类所见即所得编辑器里,你可能直接按了回车,看到显示就是换行,就以为学会了。但把这个文件丢到GitHub或者别的平台上,效果就变了——因为GFM规则下,单换行会被自动当作<br>处理,而CommonMark规则下则不会。所以同一份文档在本地预览好端端的,传到某些平台就挤成了一坨,这个差异你迟早会遇到。
我的习惯是:在纯Markdown文本里,段落之间一律用空行分隔,需要强制换行时就用<br>,一是不容易忘,二是跨平台显示更可控。别依赖"行尾两个空格"这个写法,因为它肉眼几乎看不见,你自己过几天再看都不知道那里有没有空格。
3.2 图片路径:相对路径、绝对路径、还是网络URL?
Markdown插图看起来很简单,就是,但"markdown图片路径"能上热搜,说明问题一点都不简单。
你写的路径主要有三种类型:
- 网络URL:
,图片放在线上,文档传到任何地方都能显示,但依赖网络,而且图床失效就全挂。 - 相对路径:
,图片放在本地文档的相对目录下,最推荐使用,因为文档和图片一起移动时,相对关系保持住就不会断。 - 绝对路径:
或者C:\Users\...,这种路径换一台电脑基本就废了,除非你只在固定设备上用。
关于相对路径,我最想强调的是目录规范。我从一开始就建议你把所有图片收进一个固定文件夹,比如和文档同一级的assets或images目录。很多编辑器都内置了这个功能——拿Typora来说,在设置里有一个"图片"选项,可以勾选"复制图片到 ./assets 文件夹",这样你往文档里粘贴任何截图,它都会自动存进assets目录,并把路径自动写成相对路径。
这里我要分享一个真实教训:我刚用Markdown的前几个月,图片是随手放的,和文档混在一个文件夹里。后来文档多了,图片散得到处都是,我不得不写了个脚本去整合,非常痛苦。如果你一开始就养成"一个文档对应一个assets目录"的习惯,后面整理会省掉大量时间。
另外一个小技巧:想控制插入图片的显示宽度,Markdown语法本身做不了,但可以混用HTML:
<img src="./assets/demo.png" width="400" />几乎所有渲染器都能识别,这在写带截图的教程时非常实用。
3.3 插入代码:代码块、行内代码、以及反引号的"三重嵌套"问题
代码是技术文档里最核心的内容,"markdown 插入code"这个需求概括起来就是两种:
- 行内代码:用单个反引号包裹,比如
`print("hello")`,渲染出来是一小段等宽字体。 - 代码块:用三个反引号包裹,并且在开头注明语言,比如:
```python print("hello") ```第一行三个反引号之后跟的语言名很关键,它决定了代码高亮的语法规则。常见的标注有python、javascript、bash、json、sql等,不同渲染器认识的名称略有差异,但主流的名字基本都支持。
我知道一定会有人遇到这个情况:想在代码块里展示含有三个反引号的代码,比如写一篇教别人用Markdown的笔记。很多新手会直接把```写进代码块里,结果发现代码块提前结束了,后面的内容全乱了。
解决办法是使用超过代码内容中反引号数量的包裹符号。比如你想在代码块里展示```python,那就用四个反引号包裹整个代码块:
````markdown ```python print("hello") ``` ````这样反引号只是个数多少的问题,不会产生冲突。类似的还有波浪线~~~也能创建代码块,但用的场景少一些。
最后提醒一句:从IDE或网页里整段拷贝代码时,经常把行号、多余空行一起粘进来。粘贴后记得检查代码块内部格式——尤其是在Markdown里,缩进如果混用了Tab和空格,在某些渲染器里会变得对不齐。干净、有语言标注、有良好缩进的代码块,才是专业文档该有的样子。
4. 表格、数学公式与流程图:进阶排版的三板斧
4.1 表格语法拆解:为什么表格写出来总是歪的
Markdown表格是GFM扩展语法,冒号、短横线、竖线组合起来。它的基本格式是三行起跳:
| 姓名 | 年龄 | 城市 | | --- | --- | --- | | 张三 | 25 | 上海 | | 李四 | 30 | 北京 |其中第二行的|---|是必须存在的分隔行,少了它整个表格就渲染不出来。分隔行里的短横线数量至少一个,但为了对齐美观,通常写两三个以上。分隔行里的冒号还控制对齐方式:
:---左对齐:---:居中---:右对齐
表格里面有一个限制需要你记住:单元格内不能直接放多段落内容,也不能直接写列表。想换行的话,可以用<br>;想放列表的话,你得换用HTML表格或者接受"一个单元格一行文字"的简单形式。
关于表格的几个实操问题,我专门说一下:
表格复制到Excel。如果是把网页或编辑器里渲染好的表格复制到Excel,最快的方式是直接选中表格区域复制,到Excel里粘贴时可以选"文本导入"或"使用分列"。而如果你手里只有一段Markdown表格源码,可以直接把它复制成TSV(Tab分隔值)格式再粘贴:
姓名 年龄 城市 张三 25 上海 李四 30 北京Excel能把Tab分割的数据自动识别成列。反过来,Excel表格转成Markdown表格,可以借助在线工具,或者在Typora里直接把Excel表格复制粘贴进去,Typora会自动转换成Markdown表格源码。两个方向都有快捷路径,核心思路是"Markdown表格和电子表格之间,通过Tab/竖线做过渡"。
如果你经常和表格打交道,还应该了解Pandoc这个命令行工具。它能把Markdown表格非常规范地转成CSV、Excel可读的格式,也能从Excel导出的CSV生成Markdown表格。虽然命令行看起来不够图形化,但批量处理时效率极高,这个放到下一章详细说。
4.2 数学公式:从行内符号到块级公式
写技术文章、算法笔记或论文草稿时,数学公式是刚需。Markdown本身没有公式能力,但大部分主流编辑器都接入了MathJax或KaTeX,让Markdown文档可以内嵌LaTeX公式。你只需要在编辑器设置里打开"数学"/"公式"开关。
用法分为两种:
- 行内公式:用单个美元符号包裹,比如
$E=mc^2$,渲染后公式嵌在文字行里。 - 块级公式:用双美元符号包裹,独占一行并居中,比如:
$$ \frac{a}{b} + \sqrt{x^2 + y^2} = \sum_{i=1}^{n} i $$基础的LaTeX语法包括:上标^、下标_、分数\frac{}{}、根号\sqrt{}、求和\sum_{}^{}、希腊字母\alpha \beta \theta等。你真正常用的其实也就二十来个符号,不用背很多。
插件层面,不同编辑器方案不一样:
- Typora:设置 → Markdown扩展语法 → 勾选"数学公式",开了就能直接写。
- VS Code:装"Markdown+Math"插件,或者在"Markdown All in One"基础上配合MathJax相关扩展。
- Obsidian:默认支持,如果预览不显示,去设置里开启LaTeX渲染。
遇到过的最常见问题是:美元符号和中文文本之间没有空格,导致公式不显示。比如价格是$5这种,渲染器会误以为你想写行内公式,然后匹配不到结束的$,整个页面都乱掉。解决办法是公式的$和文字之间加空格,或者把货币金额这种场景写成5美元这种不带符号的表达。
4.3 流程图不是画出来的:Mermaid语法与转换思路
"有道云markdown转流程图"这种搜法,其实暴露了一个普遍的误解。大家以为Markdown里有个按钮点了就能生成流程图,实际上在Markdown里画流程图靠的是Mermaid这种"用文本描述图形的语言"。
基本结构非常直观:
graph TD A[开始] --> B{条件判断} B -->|是| C[执行] B -->|否| D[结束]TD表示top-down从上到下布局,LR表示left-right从左到右。节点可以是方括号(矩形)、花括号(菱形)、圆括号(圆角矩形),箭头用-->,连线上的文字用-->|文字|。画时序图、甘特图也都有对应语法。
Typora、Obsidian、GitHub、VS Code的预览插件,以及很多在线Markdown编辑器都支持Mermaid渲染。在有道云笔记里,新建Markdown笔记后,把Mermaid代码放进代码块并指定语言为mermaid,它就会渲染成图。
至于"转换"这件事,我的经验是:流程的源文件是Mermaid代码,而不是渲染出来的图片。想要把Mermaid转成Visio或Draw.io能编辑的格式,可以用一些专门的转换工具(社区里有人做了mermaid转drawio的脚本),或者干脆在Draw.io里直接粘贴Mermaid代码,新版Draw.io支持从文本创建图形。如果只是想把渲染好的图保存下来,直接对预览区域截图或者导出成PNG就完事。凡是"Markdown转流程图"的需求,你脑子里应该先把这句话翻译成:"我需要学习怎么用Mermaid写流程图"。
5. 进阶玩法:Callout、Markdown转Word、以及让Agent帮你存网页
5.1 GitHub Callout:给文档加一眼就能识别的提示框
Callout是GitHub在2023年更新的一个GFM扩展语法,用起来像引用块,但带了一个提示框样式,特别适合给README和文档里的注意事项、重要信息做标注。
写法是:以>开头,用[!类型]标明提示级别。目前支持五种类型:
| 类型 | 含义 | 适用场景 |
|---|---|---|
[!NOTE] | 普通提示 | 补充说明、背景信息 |
[!TIP] | 技巧建议 | 推荐做法、省力技巧 |
[!IMPORTANT] | 重要信息 | 必须注意的关键内容 |
[!WARNING] | 警告 | 可能导致错误的操作 |
[!CAUTION] | 小心 | 可能造成严重后果的风险 |
实际写起来是这样:
> [!WARNING] > 这里不要使用绝对路径,否则换设备后图片会全部失效。渲染出来的效果是一块带颜色和图标的高亮区域,比干巴巴的文字醒目很多。这里有个兼容性提醒:Callout目前主要在GitHub上有效,Typora原生不支持(但我记得老版本可以通过插件模拟Admonition效果的语法),Obsidian则需要装Admonition插件。所以你写README发到GitHub时,可以放心用Callout;写本地笔记用Obsidian时,记得装对应的插件,否则它只能显示为普通引用块。
5.2 Markdown转Word:一条一条命令搞定,也可以做成Coze工作流
"markdown转word工作流coze"这个热搜词很有代表性,说明现在很多人已经不满足于本地转换,而是想把这个过程自动化、流程化。
先讲本地最靠谱的方案——Pandoc。它是文档格式转换领域事实上的标准工具,一条命令就能把Markdown转成Word:
pandoc input.md -o output.docx默认不带任何参数转换出来的docx,样式会比较朴素,但结构(标题、段落、表格、代码块)是完整的。如果你想带参考文献、自定义样式,可以加--reference-doc=样式模板.docx参数。这个参数的做法是:先用Word生成一个你满意的样式文件,Pandoc按照这个样式输出。我一般会这么干:
pandoc input.md -o output.docx --reference-doc=my-style.docxPandoc还支持PDF、HTML、epub、LaTeX等几乎所有你能想到的格式。会了它,你就再也不用担心"导出Word乱排版"这种问题了。
再说Coze工作流。如果你经常有"收到一篇Markdown笔记,自动转成Word发给别人"这种重复操作,完全可以在Coze里搭一个自动化流程。思路大概是:接收Markdown文件/文本 → 用节点调用Pandoc或文档转换服务 → 输出Word文件 → 存到目标位置。
在Coze这类工作流平台里,你可以把"谁上传Markdown文章"作为触发节点,后面跟上"文本处理节点"和"文件生成节点",最后推到云盘或消息推送。这一步其实并不复杂,核心就是把你在终端里手动敲的那条Pandoc命令,封装到一个自动化流程里。我自己习惯的做法是:先本地把Pandoc命令跑通,确认转换效果,再去工作流平台上搭自动化,这样调试成本最低。
5.3 让Agent把网页保存成Markdown:阅读、剪藏、整理的自动化链路
这个场景现在非常火。你看到一篇不错的网页文章,想把它变成Markdown存进自己的笔记库,最原始的做法是复制粘贴再手动清理格式。但现在的工具完全可以做到一键保存。
基本链路分三块:
- 提取正文。浏览器插件或者爬虫工具会先用类似Readability的算法,把网页正文从导航、广告、侧边栏这些噪音中抽取出来。这一步的质量决定整个转换的上限。
- 转换为Markdown结构。正文拿到后,再把标题层级(h1/h2/h3)、图片、列表、代码块转成对应的Markdown语法。现在不少AI助手或"Agent技能"就是干这个的:给它一个网页URL,它读出正文并按照规范排版输出
.md文件。 - 本地整理与归档。保存时建议保留原始URL、保存时间、作者信息,这些元数据对你后续回顾和溯源非常重要。
关于实操工具,我比较常用的是浏览器插件方案,比如"MarkDownload"这类扩展,点击按钮就能把当前页面转成Markdown下载。命令行派可以试试一些开源工具,它们能批量处理一批URL。各类社区里还有不少开发者把自己写的转换脚本做成了"网页转markdown Skill",专门供智能体调用,让AI根据指令抓取、整理网页并输出结构化Markdown,本质上就是"读取网页 → 解析 → 生成md"这套动作的封装。
这里有一个很关键的习惯建议:保存网页为Markdown之后,不要直接丢进笔记库。我一般会先过一遍:检查图片是否下载到本地、代码块是否完整、表格是否被正确转换。网页里很多内容是"看起来像表格,实际是div排版",转换后可能会变成一堆混乱的文本,这个只能靠人工微调。自动化工具负责效率,但最终的质量还是要靠你扫一眼。
学到这里,你对Markdown的认识应该已经远超"会写标题和加粗"的阶段了。我最后想分享的一个实际经验是:Markdown学到后面,真正值钱的不是你背下了多少语法,而是你养成了多大程度依赖纯文本的写作习惯。我现在写文章、记笔记、写任务清单,甚至发一些长消息,都下意识用Markdown的结构去组织。
如果你也想像我一样把它变成肌肉记忆,我推荐一个笨但有用的方法:在编辑器里把最常用的几段格式——表格模板、代码块模板、Callout模板、图片引用模板——都存成代码片段(snippet),设定好快捷键。这样你在写作时永远不用从零敲语法,顺便也就把规范刻进了日常操作里。工具顺手了,Markdown就不再是"要学的东西",而是你表达的一部分。