logo
0
0
WeChat Login

功能特性

Obsidian Callout 语法支持

插件会将 Obsidian 的 Callout 语法(> [!type])转换为带样式的 HTML,在博客园中保留视觉效果。

支持的 Callout 类型

类型图标颜色别名
note📝蓝色-
abstract📋青色summary
infoℹ️蓝色todo
tip💡绿色hint, important
success浅绿done
question青绿help
warning⚠️橙色caution, attention
failure红色-
danger☠️粉红error, bug
example📎紫色-
quote💬灰色cite

普通 Callout

> [!note] 标题
> 这是内容

转换为带左侧色条、背景色、图标的 HTML <div> 块。

可折叠 Callout

支持 Obsidian 的 + / - 折叠语法:

> [!tip]+ 默认展开,可折叠
> 展开的内容

> [!faq]- 默认折叠,可展开
> 折叠的内容
  • [!type]+ → 默认展开,可点击折叠
  • [!type]- → 默认折叠,可点击展开

博客园兼容性说明:折叠功能使用 HTML 原生 <details>/<summary> 标签实现。为保证博客园 Markdown 渲染器正确处理,遵循以下规则:

  1. <details><summary> 标签本身不加内联 style(否则 Markdown 渲染器会将其当作复杂 HTML 块跳过折叠)
  2. </summary> 后必须有空行(博客园 Markdown 渲染必需)
  3. Callout 视觉样式(色条、背景色等)放在 <details> 内部的 <div>
  4. </details> 前留空行与内容分隔

Obsidian 注释剥离

自动去除 Obsidian 的 %%注释%% 语法,注释内容不会出现在博客园文章中。

这段文字可见 %%这段是注释,不会同步%%

Frontmatter 摘要支持

在笔记的 frontmatter 中添加 excerpt 属性,同步时会自动映射为博客园文章的摘要:

---
excerpt: 这是文章摘要
---

本地图片自动上传

同步文章时,自动检测本地图片引用,上传至博客园图床并替换为网络地址,无需手动处理图片。


架构设计

内容处理管线(rightClickToUpload)

原始 Markdown
  │
  ├─ 1. vault.cachedRead(file) 读取原始内容
  ├─ 2. findAllEmbeds() 获取图片嵌入信息
  ├─ 3. uploadImgs() 上传本地图片到博客园
  ├─ 4. replaceImgLocalToNet() 替换本地图片为网络地址(基于原始 offset)
  ├─ 5. stripObsidianComments() 去除 %%注释%%
  ├─ 6. convertCalloutsToHtml() Callout 语法转 HTML
  │
  └─ 上传文章

关键设计决策:图片替换(步骤4)必须在内容转换(步骤5-6)之前执行,因为 replaceImgLocalToNet() 依赖 EmbedCache 中记录的原始文件 offset 来定位图片语法。如果先做注释剥离或 Callout 转换,offset 会全部偏移,导致图片替换到错误位置。


已知问题与后续优化

  • Callout 折叠内容中的 Markdown 语法(如代码块、列表)在博客园渲染可能不完整,当前仅对单行文本做 <p> 包裹
  • Callout 嵌套引用块(> > 嵌套)暂未处理
  • getImg() 中使用固定根路径 / 解析图片链接,文件在子目录时相对路径图片可能找不到
  • 删除文章时暂不支持同步删除博客园文章

更新日志

v1.x(2026-05-13)

修复

  • 修复图片上传逻辑被破坏的问题:内容转换(注释剥离 + Callout 转 HTML)在图片替换之前执行,导致 EmbedCache 的 offset 与转换后的内容不匹配,图片链接替换到错误位置或未替换

新增

  • Obsidian Callout 语法转 HTML(> [!type]),支持 15 种类型,保留左侧色条、背景色、图标等视觉效果
  • 可折叠 Callout 支持(> [!type]+ / > [!type]-),使用 <details>/<summary> 实现博客园兼容的折叠/展开
  • Obsidian 注释剥离(%%注释%%),注释内容不会同步到博客园
  • Frontmatter excerpt 属性支持,自动映射为博客园文章摘要
  • .cnb.yml 集成 npm install,开发环境启动时自动安装依赖

关键 Bug 修复过程

  1. 正则折叠标记位置错误:\[!(\w+)([+-]?)\](标记在 ] 前)→ 修正为 \[!(\w+)\]([+-]?)(标记在 ] 后),与 Obsidian 实际语法 [!type]+ 一致
  2. <details>/<summary> 加内联 style 导致博客园 Markdown 渲染器跳过折叠 → 样式移至内部 <div><span>
  3. </summary> 后缺少空行导致博客园 Markdown 渲染器不渲染内容 → 添加空行

开始

项目简介

由于Markdown语法的便捷性, 我们从繁重的排版布局工作中解脱出来, 越来越多的人开始接受这种写作方式, 该插件可以将你的md笔记, 方便的同步到博客园中, 即使你是使用的本地图片, 也无须担心, 他都能轻松应对, 并且不会对你的本地文档造成任何影响

快速上手

既然是Obsidian插件, 必然默认以及安装好了Obsidian这款编辑器

下载依赖插件

关闭安全模式,如果已经关闭可跳过此步骤 路径: 设置 -> 选项 -> 第三方插件

打开社区插件市场,这可能需要你会一点点的魔法 路径: 设置 -> 选项 -> 第三方插件

社区插件市场内搜索 Custom Attachment Location

点击搜索出的插件,点击安装

点击启用该插件

下载obsidian-sync-cnblog

操作步骤如上

配置Obsidian

我们需要进入到 设置 -> 选项 -> 文件与链接 选项卡,将下图中红框内的设置项调整成与图片一致

img

进入 Custom Attachment Location 选项卡,按照下图配置项依次配置即可 路径: 设置 -> 第三方插件 -> Custom Attachment Location

进入 obsidian-sync-cnblog选项卡,该选项卡中的除去 locationPosts以外的所有参数均要参考自己的博客园账号,按照实际需求配置

image-20241129133338145

访问如下链接 博客后台 - 博客园 (cnblogs.com),未登录用户会跳转登录页面, 输入自己的账号密码登录即可,登录成功后。会跳转博客园后台, 滑到页面底部即可看到如下页面

  • 勾选允许 MetaWeblog 博客客户端访问
  • 参考上图配置如下参数 blogUrlusernamepassword
  • locationPosts 文章的同步目录,默认为仓库的根目录

验证插件是否可用

点击设置里的测试连接按钮,可以验证当前插件是否可用

image-20241129134250109

上传文章

启用插件后, 右键.md结尾的文件会出现 同步到博客园 的按钮, 点击该按钮, 文章会自动发布到博客园

修改文章

如果已经上传的文章, 再次点击 同步到博客园 的按钮, 会对博客园已发布文章进行更新

重命名

当前插件会自动检查重命名操作, 如果该文章已经上传博客园, 并且进行了重命名, 博客园文章的名称也会自动进行重命名的操作

About

No description, topics, or website provided.
1.78 MiB
0 forks0 stars1 branches1 TagREADMEMIT license
Language
TypeScript95.2%
JavaScript4.4%
CSS0.5%