跳转到内容

Obsidian

npm versionnpm monthly downloadsnpm sizenpm license

提供 Obsidian 风格 Markdown 语法支持,包括 Wiki 链接、Callout 标注、嵌入文件和注释语法。

安装

sh
pnpm add vitepress-plugin-obsidian
sh
npm install vitepress-plugin-obsidian
sh
bun add vitepress-plugin-obsidian
sh
deno add vitepress-plugin-obsidian
sh
yarn add vitepress-plugin-obsidian

使用

vitepress-tuck 模式 推荐

.vitepress/config.ts
ts
import { defineConfig } from 'vitepress-tuck'
import obsidian from 'vitepress-plugin-obsidian'

export default defineConfig({
  plugins: [
    obsidian({
      // 可选项,全部默认为 true
      callout: true,
      comment: true,
      embedLink: true,
      wikiLink: true,
    }),
  ],
})

查看 vitepress-tuck 了解更多

传统模式

.vitepress/config.ts
ts
import { defineConfig } from 'vitepress'
import { obsidianMarkdownPlugin } from 'vitepress-plugin-obsidian'

export default defineConfig({
  markdown: {
    config: (md) => {
      md.use(obsidianMarkdownPlugin, {
        callout: true,
        comment: true,
        embedLink: true,
        wikiLink: true,
      })
    },
  },
})

Wiki 链接

Wiki 链接是 Obsidian 中用于链接到其他笔记的语法。使用双括号 [[]] 包裹内容来创建内部链接。

语法

md
[[文件名]]
[[文件名#标题]]
[[文件名#标题#子标题]]
[[文件名|别名]]
[[文件名#标题|别名]]
[[https://example.com|外部链接]]

文件名搜索规则

当使用 Wiki 链接时,文件名会按照以下规则进行搜索匹配:

匹配优先级:

  1. 完整路径 - 精确匹配文件路径
  2. 模糊匹配 - 匹配路径结尾的文件名,优先匹配最短路径

路径解析规则:

  • 相对路径(以 . 开头):相对于当前文件所在目录解析
  • 绝对路径(不以 . 开头):在整个文档树中搜索,优先匹配最短路径
  • 目录形式(以 / 结尾):匹配该目录下的 index.md

示例:

假设文档结构如下:

txt
docs/
├── index.md
├── guide/
│   ├── index.md
│   └── markdown/
│       └── obsidian.md

docs/guide/markdown/obsidian.md 中:

语法匹配结果
[[obsidian]]匹配 docs/guide/markdown/obsidian.md(通过文件名检索)
[[./]]匹配 docs/guide/markdown/index.md(相对路径)
[[../]]匹配 docs/guide/README.md(上级目录)
[[guide/]]匹配 docs/guide/README.md(目录形式)

示例

外部链接:

输入:

md
[[https://example.com|外部链接]]

输出:

外部链接

内部锚点链接:

输入:

md
[[npm-to]]  <!-- 通过文件名检索 -->
[[#Wiki 链接]]  <!-- 当前页面使用 heading -->
[[file-tree#配置]]  <!-- 通过文件名检索,并链接到 heading -->

输出:

npm-to

obsidian > Wiki 链接

file-tree > 配置

Obsidian 官方 - Wiki Links

嵌入内容

嵌入语法允许你将其他文件资源插入到当前页面中。

语法

md
![[文件名]]
![[文件名#标题]]
![[文件名#标题#子标题]]

文件名搜索规则与 Wiki 链接 相同。

/ 开头或 无路径前缀如 ./ 形式的,从 public 目录中加载资源

图片嵌入

语法:

md
![[图片]]
![[图片|宽度]]
![[图片|宽度x高度]]

支持格式:jpgjpegpnggifavifwebpsvgbmpicotiffapngjfifpjpegpjpxbm

示例:

md
![[tuck-logo.svg]]
tuck-logo.svg

PDF 嵌入

NOTE

PDF 嵌入需要添加 vitepress-plugin-pdf 插件才能正常工作。

语法:

md
![[文档.pdf]]
![[文档.pdf#page=1]]  <!-- #page=1 表示第一页 -->
![[文档.pdf#page=1#height=300]]  <!-- #page=页码 #height=高度 -->

支持格式:pdf

示例:

md
![[https://plume.pengzhanbo.cn/files/sample-1.pdf]]

音频嵌入

语法:

md
![[音频文件]]

支持格式:mp3flacwavoggopuswebmacc


视频嵌入

NOTE

视频嵌入需要添加 vitepress-plugin-video 插件才能正常工作。

语法:

md
![[视频文件]]
![[视频文件#height=400]]  <!-- 设置视频高度 -->

支持格式:mp4webmmov


内容片段嵌入

通过 #标题 可以嵌入指定标题下的内容片段:

输入:

md
![[我的笔记]]
![[我的笔记#标题一]]
![[我的笔记#标题一#子标题]]

Obsidian 官方 - 插入文件Obsidian 官方 - 文件格式

Callout

Callout 是一种用于突出显示重要信息的语法,类似于 Vitepress 的 ::: note 提示框语法。

语法

md
> [!note]
> 内容

可选标题:

md
> [!tip] 自定义标题
> 内容

类型

Callout 支持以下类型,别名会自动映射到对应的主要类型:

类型别名说明
notequote, cite笔记、引用
tiphint ,check, done,success技巧、提示
infotodo信息、待办
warningquestion, help, faq警告、问题、帮助
cautionattention, failure, fail, missing, danger, error, bug注意、失败、危险
importantexample重要、示例
detailsabstract, summary, tldr详情、摘要

示例

基础用法:

输入:

md
> [!NOTE]
> 这是一个笔记提示框。

输出:

NOTE

这是一个笔记提示框。


带标题:

输入:

md
> [!TIP] 实用技巧
> 使用 `pnpm` 可以显著加快依赖安装速度。

输出:

实用技巧

使用 pnpm 可以显著加快依赖安装速度。


多种类型:

输入:

md
> [!success]
> 操作成功完成!
>
> [!warning]
> 这是一个警告信息。
>
> [!caution]
> 请谨慎操作,此操作不可撤销。

输出:

SUCCESS

操作成功完成!

WARNING

这是一个警告信息。

CAUTION

请谨慎操作,此操作不可撤销。


Details 类型:

details 类型会渲染为 HTML <details> 元素,支持折叠展开:

输入:

md
> [!details]
> 点我展开更多内容
>
> 这是一段隐藏的内容。

输出:

DETAILS

点我展开更多内容

这是一段隐藏的内容。

Obsidian 官方 - Callout

注释

使用 %% 包裹的内容会被当作注释,不会渲染到页面中。

语法

行内注释:

md
这是一个 %%行内注释%% 示例。

块级注释:

md
%%
这是一个块级注释。
可以跨越多行。
%%

示例

行内注释:

输入:

md
这是一个 %%行内注释%% 示例。

输出:

这是一个 示例。


块级注释:

输入:

md
注释之前的内容

%%
这是一个块级注释。

可以跨越多行。
%%

注释之后的内容

输出:

注释之前的内容

可以跨越多行。

Obsidian 官方 - 注释

注意事项

  • 这些插件提供的是 兼容性支持,并非完全实现 Obsidian 的全部功能
  • 部分 Obsidian 特有的功能(如内部链接的图谱视图、双向链接等)不在支持范围内
  • 嵌入内容时,被嵌入的页面也会参与主题的构建过程
  • PDF 嵌入需要添加 vitepress-plugin-pdf 插件才能正常工作
  • 视频嵌入需要添加 vitepress-plugin-video 插件才能正常工作
  • / 开头或使用 ./ 形式的嵌入资源会从 public 目录加载

基于 MIT 许可发布