程序员敲代码写文档格式总乱套别急这版Markdown语法从标题列表到表格代码块超详细实战教程手把手教你30分钟搞定文档排版不求人
昨天加班写技术方案,好不容易代码跑通了,结果发现README.md里的列表缩进全乱了,表格对不齐,代码块也没高亮,发给同事被吐槽”这排版是原始人写的”。那一刻我懂你的痛,谁还没个文档写得乱七八糟、自己都看不下去的时候。
但是!如果你掌握了Markdown,这些东西其实30分钟就能搞定。今天我就把自己踩过的坑、总结的经验,全部分享给你。不用装插件,不用学复杂的工具,一个记事本就能开始写。
先搞懂Markdown到底是啥,别被术语吓到
Markdown是一种轻量级标记语言,说白了就是你在普通文本里加一些特殊符号,就能让文字自动变成标题、加粗、列表、表格等等。你不需要点鼠标选格式,纯靠键盘就能搞定排版。
它的核心优势就三个:简单、通用、纯文本。简单到你看完教程就能上手,通用到GitHub、知乎、掘金、Notion全都支持,纯文本意味着换平台、换工具也不用担心格式丢失。
我第一次用Markdown是2018年,同事甩给我一个.md文件,我打开一看满篇#和**,以为是乱码。结果人家说”这就是Markdown”,我半信半疑打开GitHub预览,嚯,排得整整齐齐。从那以后我就再也没用过Word写技术文档。
标题层级:一二级标题搞定文档骨架
写文档第一件事就是搭骨架,标题就是骨架。Markdown的标题用#表示,几个#就是几级标题,#后面要空一格,这是很多人容易漏的地方。
# 这是标题,一级,也是最大的标题,通常用于文档主标题
## 这是二级标题,用于分章节
### 这是三级标题,用于小节
#### 四级标题、五级标题、六级标题也都支持,但一般写到三级就够用了
实战技巧:实际写文档时,建议层级不要超过三级。太多层级的标题会让文档结构看起来像俄罗斯套娃,读者也找不到重点。我写技术方案的习惯是:一级标题是文档名,二级标题是主要模块,三级标题是具体功能点,这样结构清晰,别人一眼就能看懂你的思路。
还有一个容易被忽视的细节:标题后面加几个空格也能让渲染更干净。比如# 标题(后面跟两个空格),某些渲染器会额外留白,看起来更舒适。这个细节在我写内部文档时,被产品经理夸过排版专业。
段落和换行:别把换行当回车用
很多新手写Markdown会踩一个坑:在编辑器里敲回车,结果预览时没有换行。这是因为Markdown里单个回车不算换行,它只会被当成普通空格处理。
这是第一段。
这仍然是第一段,因为单个回车会被忽略。
这是第二段,两个回车才会真正换段。
这又是另一段。
渲染结果:
这是第一段。 这仍然是第一段,因为单个回车会被忽略。
这是第二段,两个回车才会真正换段。
这又是另一段。
行内换行:如果你想在段落中间强制换行,就在行尾加两个空格再回车,这样渲染器会识别为换行而不是同一段。比如:
这是一行文本,
这是同一行的第二行(注意前面有两个空格)。
这个技巧在写注意事项列表或者歌词式排版时特别有用。我第一次发现这个用法,是在写一个歌词拼接文档时,被组长指出”为什么每行都挤在一起”,这才知道行尾两个空格的存在。
粗体和斜体:强调内容就靠它们
写文档时,有些内容需要突出显示,粗体和斜体是最基础的强调方式。
**这是粗体**,用两个星号包裹
*这是斜体*,用一个星号包裹
***这是粗体加斜体***,用三个星号包裹
__这也是粗体__,用两个下划线包裹
_这也是斜体_,用一个下划线包裹
什么时候用粗体,什么时候用斜体:这个我之前也纠结过。后来总结了一个经验:粗体用于强调关键结论、重要参数、警示信息;斜体用于强调术语首次出现、外文单词、内心独白式的内容。
比如写技术文档:
**注意**:生产环境禁止直接操作数据库,必须先走工单系统。
请在 `config.py` 中修改 *timeout* 参数,建议设置为 **30秒**。
这样一眼就能看到重点在哪里。我第一次用这套规则写文档后,被测试同事反馈”以前你的文档我总找不到重点,现在一眼就能看到关键信息”。
引用块:引用别人说的话,或者标注注意事项
引用块用>符号表示,可以嵌套,也可以和段落、列表混排。它最常用的场景就是标注说明、引用原文、或者写注意事项。
> 这是普通引用块,常用于引用原文或他人观点。
> 可以写多行,也可以嵌套更深层的引用。
>> 这是嵌套引用,用两个大于号表示。
实际文档中,引用块最实用的场景是写”备注”或”警告”。比如:
> **重要提示**:本接口当前版本为v2,v1已于2024年下线,请勿再调用旧接口。
> 参考文档:[API完整说明](https://example.com/api)
> 如有问题,请在技术群@张三 确认后再操作。
这种写法比直接写在段落里更醒目,读者一看就知道这是补充说明,不是正文内容。我写技术方案时,凡是涉及版本说明、依赖关系、风险提示的,一律用引用块,这样读者扫一眼就能看到需要注意的地方。
还有一个进阶用法:引用块里可以嵌套其他Markdown元素,比如列表、代码块、甚至标题。比如写一个复杂的需求文档时:
> ## 需求背景
> 当前系统存在以下问题:
> 1. 接口响应时间超过2秒
> 2. 数据库查询无索引优化
>
> ### 解决方案
> - 增加缓存层
> - 优化SQL语句
这样引用块就变成了一个”独立的小文档”,非常适合写需求描述、设计说明这类需要结构化呈现的内容。我第一次用这个技巧是在写产品需求文档时,被产品总监夸”文档结构清晰,一目了然”。
列表:有序和无序,别再用纯文本凑了
列表是技术文档里使用频率最高的元素之一,写得好能让文档逻辑清晰,写不好就是一团乱麻。
无序列表用-、+或*开头都可以,推荐统一用-,看起来最干净。
- 第一项
- 第二项
- 第三项
+ 用加号也可以
+ 但是不建议混用,保持风格统一
* 星号也行,但推荐只用一种符号
有序列表用数字加句号:
1. 第一步:注册账号
2. 第二步:完善资料
3. 第三步:完成认证
嵌套列表是重点,很多人写文档时缩进用Tab键,结果渲染出来全乱了。正确做法是用两个空格缩进:
- 前端技术栈
- Vue 3(主要框架)
- Element Plus(UI组件库)
- 表格组件
- 表单组件
- Pinia(状态管理)
- 后端技术栈
- Node.js
- Express
- MySQL
渲染效果:
- 前端技术栈
- Vue 3(主要框架)
- Element Plus(UI组件库)
- 表格组件
- 表单组件
- Pinia(状态管理)
- 后端技术栈
- Node.js
- Express
- MySQL
实战中一个常见坑:嵌套列表里的子项如果内容比较长,换行后必须继续缩进对齐,否则会被渲染成新的顶级列表项。比如:
- 错误写法(换行没缩进):
这个选项的内容很长,
换行后没有对齐就会出问题
- 正确写法:
这个选项的内容很长,
换行后需要继续缩进两格
我第一次踩这个坑是在写一份长达50页的技术方案,预览的时候发现第三级列表突然冒出来好几个新项,找了一晚上才找到原因——某一行换行时忘了加缩进。从那以后,我写列表时都会先写完所有层级,再统一检查缩进,省去了大量调试时间。
分割线:给文档分段,让阅读更轻松
分割线用三个以上的-或*表示,空一行后渲染出来就是一条横线。
---
***
*****
分割线虽然简单,但在长文档里特别有用。比如写一个操作手册,每个大步骤之间用分割线隔开,读者就不会看花眼。或者写章节分隔,比用标题更柔和,不会打断阅读节奏。
我写内部Wiki文档的习惯是:每写完一个完整的功能模块,就加一条分割线,这样读者看完一个模块,视觉上有个”喘息”的空间,再继续读下一个模块时不会感到疲劳。这个习惯是我被技术组组长提醒后养成的,他说”你的文档内容很好,但太密了,读者看着累”。
代码块:程序员的核心技能,必须精通
写技术文档,代码块是必备技能。Markdown的代码块分两种:行内代码和代码块。
行内代码用反引号包裹,适合在段落中引用变量名、函数名、文件名等:
在 `config.py` 中设置 `timeout = 30` 即可生效。
执行 `npm install` 安装依赖。
代码块用三个反引号包裹,可以指定语言实现高亮:
```javascript
function hello() {
console.log('Hello, Markdown!');
}
def hello():
print("Hello, Markdown!")
npm install markdown-it
python3 -m pip install markdown
代码高亮的语言标识:常见语言缩写如下,记住常用的就行:
js或javascriptpy或pythonbash或shjavac、cppjsonsqlhtml、cssgoruby
实战技巧:代码块里的内容,开头的反引号后面跟语言标识,中间不要有空格。比如js`是对的,`js也是对的,但`js(两个空格)有些渲染器会识别失败。我第一次遇到这个坑是在用VS Code写文档时,复制了一段代码,结果没有高亮,折腾了半天发现是反引号后面多了一个空格。
还有一个容易被忽视的细节:代码块里如果要显示反引号本身,可以用四个反引号包裹:
````
这里可以正常使用三个反引号:
```javascript
console.log('hello');
””
我在写一份关于Markdown语法的文档时就遇到过这个问题——教别人写代码块,但代码块里又要演示反引号。后来查了资料发现用四个反引号就能解决,这个技巧虽然冷门,但在特定场景下非常实用。
链接和图片:让文档”活”起来
链接和图片是技术文档里增强可读性的利器。
链接用方括号加圆括号:
[GitHub](https://github.com)
[点击查看详情](https://example.com "可选的标题文字")
图片和链接格式一样,只是前面多了一个感叹号:

实战中常见的问题:图片链接用相对路径时,要注意文档的渲染环境。比如你在本地用Typora预览没问题,但发到GitHub上可能就显示不了,因为GitHub的渲染路径和Typora不同。解决方法是用绝对路径或者把图片上传到图床(比如SM.MS、Imgur)后引用。
我第一次在GitHub上发文档,配图全裂了,被同事调侃”你的文档是故意做404测试的吗”。后来我养成了习惯:所有图片都上传到图床,文档里只用绝对路径引用,从此再也没遇到过图片加载问题。
还有一个进阶用法:给图片和链接加锚点,方便读者跳转到指定位置:
<a id="top"></a>
[回到顶部](#top)
我在写长篇技术文档时,都会在开头加一个”回到顶部”的锚点链接,读者翻到文末时可以一键跳回开头,这个细节提升了很大的阅读体验。
表格:数据展示的专业姿势
表格是技术文档里最容易写乱的元素,缩进不对、分隔符写错,渲染出来就不是表格而是乱码。
标准表格语法:
| 姓名 | 年龄 | 职位 |
| ---- | ---- | ---- |
| 张三 | 28 | 前端开发 |
| 李四 | 32 | 后端开发 |
| 王五 | 25 | 产品经理 |
渲染效果:
| 姓名 | 年龄 | 职位 |
|---|---|---|
| 张三 | 28 | 前端开发 |
| 李四 | 32 | 后端开发 |
| 王五 | 25 | 产品经理 |
分隔行的对齐方式:分隔行里短横线下面的冒号可以控制对齐方式。:在左边是左对齐,在右边是右对齐,两边都有是居中对齐:
| 姓名 | 年龄 | 职位 |
| :--- | :---: | ---: |
| 张三 | 28 | 前端开发 |
| 李四 | 32 | 后端开发 |
渲染效果:
| 姓名 | 年龄 | 职位 |
|---|---|---|
| 张三 | 28 | 前端开发 |
| 李四 | 32 | 后端开发 |
表格里的特殊字符处理:如果单元格里有管道符|,需要用反斜杠转义:
| 语言 | 用途 |
| ---- | ---- |
| Go | 服务器端\|高并发 |
| Python | 数据分析\|AI |
渲染效果:
| 语言 | 用途 |
|---|---|
| Go | 服务器端 |
| Python | 数据分析 |
实战经验:写表格时,先写表头和分隔行,再填充数据,这样不容易乱。我第一次写表格时先把数据填好再加分隔行,结果分隔行的短横线数量和列数对不上,渲染出来错位了。后来我总结了一个固定模板:
| 列1 | 列2 | 列3 |
| --- | --- | --- |
| | | |
先写好这个骨架,再填内容,几乎不会出错。这个习惯让我写文档的时间缩短了一半以上。
任务列表:写TODO和进度跟踪
任务列表在技术文档里特别实用,比如写release note、项目todo、issue跟踪等场景。
- [x] 完成需求分析
- [x] 设计技术方案
- [ ] 编写核心代码
- [ ] 编写测试用例
- [ ] 上线部署
渲染效果:
- [x] 完成需求分析
- [x] 设计技术方案
- [ ] 编写核心代码
- [ ] 编写测试用例
- [ ] 上线部署
任务列表的妙用:在GitHub的README里放任务列表,可以直观展示项目进度。我在维护开源项目时,就把核心功能的开发进度用任务列表写在README里,用户一看就知道哪些功能已经做好了,哪些还在开发中。这种方式比纯文字描述直观得多。
任务列表和普通的有序、无序列表语法基本一样,唯一区别是方括号里要填x或留空。这个细节很容易被忽略,我刚开始写的时候方括号里忘了填x,结果渲染出来就是普通勾选框,没有完成状态的效果。
特殊字符和转义:那些让人头疼的小符号
Markdown里有一些特殊符号,如果你想在正文中显示它们本身,需要转义。
\*这不是斜体\*
\#这不是标题
\>这不是引用
\`这不是代码\`
\[这不是链接
最常见的坑:在中文语境下写文档,全角符号和半角符号混用会导致渲染异常。比如用中文的逗号,代替英文的逗号,,或者用中文的引号""代替英文的引号""。这些符号虽然不影响阅读,但会影响某些Markdown解析器的判断。
我的经验是:写Markdown时全程使用英文半角符号,标点符号切换到英文输入法后再写。这个习惯一开始有点别扭,但习惯了之后写文档会顺手很多。我第一次被这个问题坑是在写一份给国外同事看的文档时,他们那边渲染出来全是乱码,我查了半天发现是中文逗号的问题。
实战演练:把学到的内容串起来
光看不练假把式,下面我把前面讲的所有知识点串起来,写一段完整的Markdown示例:
# 个人技术博客搭建指南
> **说明**:本指南适合有一定基础的开发人员,从零开始搭建个人技术博客。
## 一、技术选型
- 前端框架:[Next.js](https://nextjs.org/)
- 样式方案:Tailwind CSS
- 部署平台:Vercel(免费额度够用)
### 为什么选Next.js?
1. **SSR支持**:对SEO友好
2. **路由系统**:内置文件路由,开发体验好
3. **生态成熟**:插件丰富,问题好搜索
## 二、项目结构
blog/ ├── app/ │ ├── page.tsx │ ├── layout.tsx │ └── blog/ │ └── [slug]/ │ └── page.tsx ├── content/ │ └── posts/ │ └── first-post.md └── package.json
## 三、核心代码
### 获取文章列表
```typescript
import fs from 'fs';
import path from 'path';
export function getPosts() {
const postsDir = path.join(process.cwd(), 'content/posts');
const files = fs.readdirSync(postsDir);
return files
.filter(file => file.endsWith('.md'))
.map(file => {
const content = fs.readFileSync(
path.join(postsDir, file),
'utf-8'
);
return { slug: file.replace('.md', ''), content };
});
}
渲染Markdown
import { remark } from 'remark';
import html from 'remark-html';
export async function renderMarkdown(markdown: string) {
const result = await remark()
.use(html)
.process(markdown);
return result.toString();
}
四、部署流程
- [x] 注册Vercel账号
- [x] 绑定GitHub仓库
- [ ] 配置环境变量
- [ ] 设置自定义域名
- [ ] 配置CI/CD
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 图片加载失败 | 使用了相对路径 | 改用绝对路径或图床 |
| SSR报错 | Node.js版本过低 | 升级至Node 18+ |
| 样式不生效 | Tailwind未配置 | 检查tailwind.config.ts |
注意事项:首次部署前请确认环境变量已配置,特别是数据库连接信息。
本指南最后更新:2024年1月 “`
上面这段示例把标题、引用、列表、代码块、表格、任务列表、分割线、链接、图片(示例中省略了图片路径,实际使用时加上即可)全部用上了。你可以把它复制到一个.md文件里,用任何支持Markdown的编辑器打开预览,看看效果。
我第一次写完这段示例后,自己读了一遍,发现逻辑清晰、层次分明,比之前用Word写的那种”一大坨文字”体验好了太多。而且因为是纯文本,随便找个编辑器就能改,不用装任何专业软件。
工具推荐:选一个顺手的编辑器
理论学完了,得有个趁手的工具才能练起来。以下这几款我用过,可以根据自己的习惯选:
VS Code + Markdown All in One插件:程序员标配,我主力用的就是这个。插件支持预览、快捷键、表格编辑、任务列表生成等,效率很高。
Typora:所见即所得的编辑器,写的时候就能看见渲染效果,适合喜欢”边写边看”的人。缺点是收费软件(不过免费版本功能已经够用)。
Obsidian:双向链接笔记软件,支持Markdown,适合写长期维护的知识库。我用来整理技术笔记,效果很好。
在线编辑器:如果不想装软件,可以用StackEdit或Markdown Live Preview,打开网页就能写。
实战建议:先选一个工具,然后找一篇你自己的技术文档,试着用Markdown重写一遍。改完后再对照原版,看看格式有什么改进。这个过程比看十遍教程都有用。我第一次这样练习时,发现自己之前写文档的习惯问题一堆——缩进不一致、列表层级混乱、代码块没有语言标识。改完之后,文档的专业度提升了一个档次。
最后说几句
写文档排版这事儿,刚开始觉得麻烦,习惯之后就发现真香。你现在花30分钟学会Markdown,以后写README、写技术方案、写需求文档,速度和质量都会上一个台阶。
别光看不练,现在就打开一个编辑器,新建一个.md文件,把上面教的语法挨个敲一遍。遇到报错别慌,把代码贴到支持Markdown预览的编辑器里看看哪里出了问题,排查的过程本身就是学习。
如果你在实际写文档时遇到具体問題,比如”代码块里的某行为什么没高亮”、”表格对齐不了”,可以留言问我,我会尽力帮你解决。
记住一句话:好文档不是写出来的,是排版出来的。掌握了Markdown,你就有了让文档”变好看”的超能力。
