1115 字
6 分钟
Fuwari使用教程
一、文章 Front-matter 字段
每篇文章的开头需要包含 YAML front-matter,用于配置文章的元信息:
---title: 我的第一篇博客published: 2024-01-01description: 这是文章的简短描述,会显示在首页卡片上。image: ./cover.jpgtags: [标签1, 标签2]category: 分类名draft: false---| 字段 | 说明 |
|---|---|
title | 文章标题 |
published | 发布日期 |
description | 文章简介,显示在首页卡片 |
image | 封面图路径。以 http:// 或 https:// 开头则使用网络图片;以 / 开头则相对于 public/ 目录;否则相对于当前 Markdown 文件 |
tags | 标签列表 |
category | 分类 |
draft | 是否为草稿。设为 true 时文章不会对外展示 |
二、文章文件组织
所有文章放在 src/content/posts/ 目录下,支持两种形式:
src/content/posts/├── single-file-post.md # 单文件形式└── post-with-assets/ # 目录形式(推荐,方便管理图片等资源) ├── cover.png └── index.md三、草稿
将 front-matter 中的 draft 设为 true,文章就不会公开显示:
---title: 还没写完的文章draft: true---写完后改为 draft: false 即可发布。
四、标准 Markdown 语法
基础格式
_斜体_、**粗体**、`行内代码`
> 引用块
--- (水平分割线)列表
- 无序列表项1- 无序列表项2
1. 有序列表项12. 有序列表项2链接与图片
[链接文字](https://example.com)
表格
| 列1 | 列2 | 列3 ||-----|-----|-----|| A | B | C |数学公式
行内公式用单个 $,块级公式用 $$:
行内公式:$\omega = d\phi / dt$
块级公式:$$I = \int \rho R^{2} dV$$脚注
这里有一个脚注[^1]。
[^1]: 脚注内容写在这里。五、扩展 Markdown 功能
GitHub 仓库卡片
自动从 GitHub API 拉取仓库信息并显示为卡片:
::github{repo="owner/repo-name"}提示块(Admonitions)
支持五种类型:note、tip、important、warning、caution
:::note这是一条注意事项。:::
:::tip这是一条小技巧。:::
:::important这是重要信息。:::
:::warning这是警告信息。:::
:::caution这是危险提示。:::效果预览:
NOTE这是一条注意事项。
TIP这是一条小技巧。
WARNING这是警告信息。
自定义标题
:::note[自定义标题]内容...:::GitHub 风格语法
> [!NOTE]> 也支持 GitHub 风格的提示块语法。
> [!TIP]> 同样支持。剧透遮罩
内容 :spoiler[被隐藏的文字] 继续。效果:内容
六、代码块增强(Expressive Code)
语法高亮
直接在代码块后加语言名即可:
console.log('Hello World')显示文件名
通过 title 属性显示文件名:
console.log('带文件名的代码块')终端样式
bash、sh、powershell 等语言会自动渲染为终端样式:
echo "这是终端样式的代码块"Write-Output "这是带标题的 PowerShell 终端"行高亮标记
用 {行号} 语法高亮指定行:
// 第1行高亮// 第2行普通// 第3行普通// 第4行高亮新增/删除标记
用 ins 和 del 标记新增/删除行:
function demo() { console.log('这行被标记为删除') // 这行被标记为新增 console.log('这也是新增行') return true}diff 语法
```diff lang="js" function demo() {- console.log('旧代码')+ console.log('新代码') }```效果预览:
function demo() { console.log('旧代码') console.log('新代码')}行内文字高亮
用 "文字" 语法高亮行内指定内容:
// 高亮行内某段指定文字return '这里的 指定文字 会被高亮,所有匹配都会高亮';也可以组合 ins / del 做行内标记:
function demo() { console.log('inserted 和 deleted 是行内标记'); return true;}折叠代码段
用 collapse={行范围} 折叠不重要的部分:
4 collapsed lines
// 这些 import 会被折叠import { someBoilerplateEngine } from '@example/some-boilerplate'import { evenMoreBoilerplate } from '@example/even-more-boilerplate'const engine = someBoilerplateEngine(evenMoreBoilerplate())
// 这部分默认展开engine.doSomething(1, 2, 3)
function calcFn() { const a = 1, b = 23 collapsed lines
// 这部分也会被折叠 console.log(`结果: ${a} + ${b} = ${a + b}`) return a + b}显示行号
// 显示行号console.log('第2行')console.log('第3行')指定起始行号:
console.log('从第10行开始编号')console.log('第11行')自动换行
加 wrap 参数后超长行会自动换行:
// 开启换行后,下面这行超长内容不会产生横向滚动条,而是自动折到下一行显示function getLongString() { return 'This is a very long string that will most probably not fit into the available space unless the container is extremely wide'}七、嵌入视频
直接在 Markdown 中粘贴 iframe 嵌入代码即可。
YouTube
<iframe width="100%" height="468" src="https://www.youtube.com/embed/VIDEO_ID" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>Bilibili
<iframe width="100%" height="468" src="//player.bilibili.com/player.html?bvid=BV_ID&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>将 VIDEO_ID / BV_ID 替换为对应视频的 ID 即可。