Mobile wallpaper
2951 字
15 分钟

Fuwari 主题 Markdown 速查表与高级用法

2025-08-04
浏览量 加载中...
AI内容警告

本文为AI翻译expressive-codemarkdown-extended并总结, 然后人工查错并优化, 更多内容请看文章内容说明

高级 Markdown 用法参考(总结自expressive-codemarkdown-extended)#

本文旨在展示 Fuwari 主题支持的更多高级格式,您可以参考这些示例来丰富您的文章内容。

A.1 GitHub 仓库卡片#

您可以嵌入一个动态的 GitHub 仓库卡片,它会在页面加载时自动获取最新的仓库信息。

saicaca
/
fuwari
Waiting for api.github.com...
00K
0K
0K
Waiting...

用法:

::github{repo="<owner>/<repo>"}

A.2 警告框 (Admonitions)#

警告框用于突出显示特定信息,支持多种类型。

NOTE

Note (注释): 用于突出那些即使用户只是扫读也应注意到的信息。

TIP

Tip (提示): 提供一些可选信息,帮助用户更成功地完成操作。

IMPORTANT

Important (重要): 对用户成功至关重要的信息。

WARNING

Warning (警告): 要求用户立即关注的关键内容,因其存在潜在风险。

CAUTION

Caution (小心): 指出某个操作可能带来的负面后果。

基础语法#

:::note
用于突出那些即使用户只是扫读也应注意到的信息。
:::
:::tip
提供一些可选信息,帮助用户更成功地完成操作。
:::

自定义标题#

您也可以为警告框添加自定义标题。

这是一个自定义标题

这是一个带有自定义标题的注释。

用法:

:::note[这是一个自定义标题]
这是一个带有自定义标题的注释。
:::

GitHub 风格警告框#

同样支持 GitHub Flavored Markdown 的警告框语法。

TIP

这是一个 GitHub 风格的提示。

用法:

> [!NOTE]
> 这是一个 Note。
> [!TIP]
> 这是一个 Tip。

A.3 Expressive Code 代码块增强#

语法高亮 (Syntax Highlighting)#

常规语法高亮#

console.log('这段代码被语法高亮了!')

用法:

```js
console.log('这段代码被语法高亮了!')
```

渲染 ANSI 转义序列#

Terminal window
ANSI colors:
- Regular: Red Green Yellow Blue Magenta Cyan
- Bold: Red Green Yellow Blue Magenta Cyan
- Dimmed: Red Green Yellow Blue Magenta Cyan
256 colors (showing colors 160-177):
160 161 162 163 164 165
166 167 168 169 170 171
172 173 174 175 176 177
Full RGB colors:
ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline

用法:

```ansi
ANSI colors:
- Regular: Red Green Yellow Blue Magenta Cyan
- Bold: Red Green Yellow Blue Magenta Cyan
- Dimmed: Red Green Yellow Blue Magenta Cyan
256 colors (showing colors 160-177):
160 161 162 163 164 165
166 167 168 169 170 171
172 173 174 175 176 177
Full RGB colors:
ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline
```

编辑器与终端窗口 (Editor & Terminal Frames)#

代码编辑器窗口#

可以通过 title 属性为代码块添加标题。

my-test-file.js
console.log('这是一个标题属性的例子')

用法:

```js title="my-test-file.js"
console.log('这是一个标题属性的例子')
```

也可以通过在代码块顶部添加注释来指定文件名。

src/content/index.html
<div>这是一个文件名注释的例子</div>

用法:

```html
<!-- src/content/index.html -->
<div>这是一个文件名注释的例子</div>
```

终端窗口#

Terminal window
echo "这个终端窗口没有标题"

用法:

```bash
echo "这个终端窗口没有标题"
```

PowerShell 终端示例
Write-Output "这个有标题!"

用法:

```powershell title="PowerShell 终端示例"
Write-Output "这个有标题!"
```

覆盖窗口类型#

你可以强制改变窗口的类型,例如将一个通常显示为终端的 sh 代码块变为无边框样式。

echo "看,没有边框了!"

用法:

```sh frame="none"
echo "看,没有边框了!"
```

或者将 PowerShell 代码块强制显示为代码编辑器样式。

PowerShell Profile.ps1
# 如果不覆盖,这会是一个终端窗口
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail

用法:

```ps frame="code" title="PowerShell Profile.ps1"
# 如果不覆盖,这会是一个终端窗口
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail
```

文本与行标记 (Text & Line Markers)#

标记整行与行范围#

使用 {} 来指定需要标记的行号。

// 第 1 行 - 通过行号标记
// 第 2 行
// 第 3 行
// 第 4 行 - 通过行号标记
// 第 5 行
// 第 6 行
// 第 7 行 - 通过范围 "7-8" 标记
// 第 8 行 - 通过范围 "7-8" 标记

用法:

```js {1, 4, 7-8}
// 第 1 行 - 通过行号标记
// ...
```

选择行标记类型 (mark, ins, del)#

可以分别指定 mark (普通标记), ins (插入), del (删除) 三种类型的行。

line-markers.js
function demo() {
console.log('这行被标记为 "删除"');
// 这行和下一行被标记为 "插入"
console.log('这是第二行 "插入" 的内容');
return '这行使用默认的中性标记类型';
}

用法:

```js title="line-markers.js" del={2} ins={3-4} {6}
function demo() {
//...
}
```

使用类 Diff 语法#

这行将被标记为插入
这行将被标记为删除
这是普通的一行

用法:

```diff
+这行将被标记为插入
-这行将被标记为删除
这是普通的一行
```

结合语法高亮与类 Diff 语法#

function thisIsJavaScript() {
// 整个代码块都会被高亮为 JavaScript,
// 同时我们仍然可以添加 diff 标记!
console.log('将被移除的旧代码')
console.log('闪亮的新代码!')
}

用法:

```diff lang="js"
//...
```

标记行内文本#

通过 "字符串"/正则表达式/ 来标记行内的特定文本。

function demo() {
// "文本" 这个词会被标记
return '这段文本中的"文本"二字会被标记。';
}

用法:

```js "文本"
function demo() {
//...
}
```

使用正则表达式#

console.log('单词 "yes" 和 "yep" 会被标记。')

用法:

```ts /ye[sp]/
console.log('单词 "yes" 和 "yep" 会被标记。')
```

自动换行 (Word Wrap)#

默认情况下,长代码行会自动换行。你可以通过 wrapwrap=false 来控制单个代码块的行为。

// 带自动换行的例子
function getLongString() {
return '这是一个非常非常长的字符串,除非容器特别宽,否则它很可能无法在可用空间内完全显示。'
}

用法:

```js wrap
//...
```

可折叠区域 (Collapsible Sections)#

使用 collapse={...} 来指定需要默认折叠的行范围。

5 collapsed lines
// 所有这些模板设置代码都将被折叠
import { someBoilerplateEngine } from '@example/some-boilerplate'
import { evenMoreBoilerplate } from '@example/even-more-boilerplate'
const engine = someBoilerplateEngine(evenMoreBoilerplate())
// 这部分代码将默认可见
engine.doSomething(1, 2, 3, calcFn)
function calcFn() {
// 你可以有多个折叠区域
3 collapsed lines
const a = 1
const b = 2
const c = a + b
// 这部分将保持可见
console.log(`计算结果: ${a} + ${b} = ${c}`)
return c
}
4 collapsed lines
// 从这里到代码块结束的所有代码将再次被折叠
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: '示例模板代码结束' })

用法:

```js collapse={1-5, 12-14, 21-24}
//...
```

行号 (Line Numbers)#

显示行号#

使用 showLineNumbers 来为代码块开启或关闭行号显示。

// 这个代码块会显示行号
console.log('来自第 2 行的问候!')
console.log('我在第 3 行')

用法:

```js showLineNumbers
//...
```

禁用行号#

// 这个代码块已禁用行号
console.log('Hello?')
console.log('Sorry, do you know what line I am on?')

用法:

```js showLineNumbers=false
// 这个代码块已禁用行号
console.log('Hello?')
console.log('Sorry, do you know what line I am on?')
```

更改起始行号#

使用 startLineNumber 来指定行号的起始数字。

console.log('来自第 5 行的问候!')
console.log('我在第 6 行')

用法:

```js showLineNumbers startLineNumber=5
//...
```

内容来源说明

本部分内容基于 link-cards 的原始英文文档, 并参考了 Pull Request #324 中的实现, 在此基础上进行翻译、整理和补充。

链接卡片(Link Cards)功能可以将 Markdown 中的裸链接(Bare Link)渲染成美观的卡片样式。

基本用法#

在 Markdown 的段落中, 只需单独放置一个“裸”链接(即没有链接文本的链接), 它就会被自动转换为链接卡片。

支持以下格式:

**外部链接**
https://astro.build/
<https://github.com/saicaca/fuwari/>
[https://fuwari.vercel.app/](https://fuwari.vercel.app/)
**内部链接** (需要额外配置)
[/posts/guide/](/posts/guide/)
**国际化域名 (IDN)**
https://はじめよう.みんな/

渲染效果如下:

https://astro.build/

https://github.com/saicaca/fuwari/

https://fuwari.vercel.app/

TIP

卡片显示后, 尝试切换一下主题颜色或开启暗黑模式看看效果!

高级配置选项#

点击展开详细配置

您可以在 astro.config.mjs 文件中对链接卡片功能进行详细配置。

启用插件#

首先, 你需要在配置文件中引入并启用插件。

astro.config.mjs
import fuwariLinkCard from "./src/plugins/fuwari-link-card.ts"
export default defineConfig({
// ...
integrations: [
// ...
fuwariLinkCard(), // 在这里添加插件
// ...
]
})

如果插件的加载顺序比较复杂, 您也可以将其作为一个 remark 插件来指定:

astro.config.mjs
import remarkLinkCard from "./src/plugins/remark-link-card.ts"
export default defineConfig({
// ...
markdown: {
// ...
remarkPlugins: [
// ...
remarkLinkCard, // 在这里添加插件
// ...
],
},
})

主要配置项#

名称类型默认值描述
devModebooleanimport.meta.env.DEV启用或禁用开发模式。
excludedUrlsArray<string | RegExp>[]一个由字符串或正则表达式组成的列表, 用于排除特定的 URL, 防止它们被处理成链接卡片。这也有助于避免与其他插件冲突。
linkAttributesObject{ target: '', rel: '' }为外部链接设置 targetrel 属性。也可以留空, 将处理交由其他插件决定。
rewriteRulesArray<Object>[]重写从链接获取的特定元数据属性, 例如标题和描述。
basestring'/'指定与 Astro 配置中相同的 base 路径。作为 integration 使用时, 若不指定, 该选项会自动推断。
defaultThumbnailstring''当元数据中不包含图片时, 使用的默认缩略图路径。该路径应相对于 public 目录。
internalLinkObject{ enabled: false, site: '' }启用站点内部链接的处理。
cacheObject见下方详细说明在构建过程中下载并缓存图片。

linkAttributes 详细说明#

名称类型默认值描述
targetstring''指定在何处打开链接文档。默认为空, 不设置 target 属性。
relstring''定义当前文档与链接文档之间的关系。默认为空, 不设置任何关系。

rewriteRules 详细说明#

名称类型默认值描述
urlRegExp用于匹配特定 URL 的正则表达式。
rewriteStepsArray<Object>定义特定元数据属性的重写规则。

以下是一个重写 GitHub 仓库链接的标题和描述的示例:

rewriteRules: [
{
url: /^https:\/\/github\.com\/[^\/]+\/[^\/]+\/?$/,
rewriteSteps: [
{ key: "title", pattern: /:.*/, replacement: "" },
{
key: "description",
pattern: /(?: (?:\. )?Contribute to (?:.+\/.+) .+\.?)|(?: - (?:.+\/.+))$/,
replacement: "",
},
{
key: "description",
pattern: /^Contribute to (?:.+\/.+) .+\.?$/,
replacement: "No description provided.",
},
],
},
],
名称类型默认值描述
keystring要重写的元数据属性的键名。
patternRegExp用于匹配元数据属性当前值的正则表达式。匹配的部分将被替换。
replacementstring用于替换元数据属性中匹配内容的字符串。

enabled 设置为 true 以启用站点内部链接的处理。sitebase 选项用于将内部链接解析为绝对 URL。内部链接必须指向服务器上存在的文件。

名称类型默认值描述
enabledbooleanfalse启用或禁用内部链接处理。
sitestring''指定与 Astro 配置中相同的部署 URL。作为 integration 使用时, 若不指定, 该选项会自动推断。

cache 详细说明#

以下相关选项可让您轻松控制缓存行为。

名称类型默认值描述
enabledbooleanfalse启用或禁用缓存。
outDirstring'./dist/'输出目录路径。与 Astro 的 outDir 保持一致可以利用图像优化等特性。
cacheDirstring'./link-card/'缓存目录路径。如果 devModetrue, 缓存图片的最终 URL 将是 base + outDir + cacheDir;否则是 base + cacheDir
maxFileSizenumber0要缓存的最大文件大小(字节)。设置为 0 表示无限制。
maxCacheSizenumber0最大总缓存大小(字节)。设置为 0 表示无限制。
userAgentstringMozilla/5.0 ...HTTP 请求头中包含的客户端标识符。

快速简便的选项设置#

该插件使用 @fastify/deepmerge 来简化选项设置。

https://www.npmjs.com/package/@fastify/deepmerge

用于样式定制的HTML结构#

链接卡片的样式由 src/styles/link-card.css 文件定义, HTML 结构是自动生成的。当您需要自定义样式时, 可以参考以下结构:

<div class="link-card__container">
<a href="https://astro.build/" class="link-card">
<div class="link-card__info">
<div class="link-card__title">Astro</div>
<div class="link-card__description">Astro builds fast content sites, powerful web applications, dynamic server APIs, and everything in-between.</div>
<div class="link-card__metadata">
<div class="link-card__domain">
<img alt="favicon" class="link-card__favicon" src="https://www.google.com/s2/favicons?domain=astro.build">
<span class="link-card__domain-name">astro.build</span>
</div>
</div>
</div>
<div class="link-card__thumbnail">
<img alt="Astro - Build the web you want." class="link-card__image" src="https://astro.build/og/astro.jpg">
</div>
</a>
</div>

赞助支持

如果这篇文章对你有帮助,欢迎赞助支持!

赞助
Fuwari 主题 Markdown 速查表与高级用法
https://blog.cmtyx.top/posts/fuwari-cheatsheet/
作者
璨梦踏月
发布于
2025-08-04
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-08-04,距今已过 104 天

部分内容可能已过时

评论区

目录