Obsidian2Hexo
最终流程图
- 简明流程:Win (obsidian) <— 坚果云 —> Mac (obsidian) <— 软链接 —> Hexo
- 实现功能:Win 的 Obsidian 做笔记,或者 Mac 的 Obsidian 做笔记 —> md 格式的文件 —> 通过 hexo 的 3 条命令上传至博客
Why Obsidian
博客文章都是使用 Markdown 格式完成的,在 Markdown 编辑体验上,Obsidian 的体验要远远好于 VS Code。毕竟术业有专攻,Obsidian 主打 Markdown 这种垂直领域的文件编辑,而 VS Code 作为通用代码编辑器,不奢求太多体验,大抵能用就行
Obsidian 丰富的插件、轻量和自定义程度高的快捷键这几点已经足以秒杀大多数具有 Markdown 编辑功能的编辑器了
面临的问题
Yaml 字段问题
Hexo 的 URL 使用 abbrlink 永久链接,而这个永久链接是使用 CRC32 算法和十六进制表示法生成的,在 Ob 中自然没有现成的工具可以实现这个功能 —> 那么转换思路,abbrlink 只要唯一就好,完全可以使用时间戳来代替这种复杂的计算
至于时间戳,可以使用 Ob 核心插件中的 模板
插件来完成,创建文件后即可自动添加 abbrlink
同理,date 和 title 字段也可以使用模板来完成,简易的 YAML 字段如下:
1 | title: {{NAME}} |
图片上传问题
习惯使用 SM.MS 这类的图床工具,在 Ob 中插入图片还需要额外手动将文中图片一张张上传到图床中,过程简单但又浪费时间,操作过程也毫无意义 —> 需要一个更加自动化的流程
既然锁定了图床这类工具,必然和 image 有关,思路也很清晰,去 Ob 的插件市场搜索关键词 image 即可
参考资料:
- Obsidian 插件:GitHub - renmu123/obsidian-image-auto-upload-plugin: auto upload image with picgo
- Picgo:GitHub - Molunerfinn/PicGo: :rocket:A simple & beautiful tool for pictures uploading built by vue-cli-electron-builder
- Picgo 安装使用过程中易出现的问题(如 macOS 系统安装完 PicGo 显示「文件已损坏」或者安装完打开没有反应):FAQ.md
图片压缩问题
问题也很清晰,在 图片压缩指南 | 智朋的个人博客 中已经介绍过了几款工具,推荐使用 caesium,可这仍然无法接入自动化流程 —> 需要将图片上传至图床前自动压缩图片 —> 也就指向了 Picgo 上传工具
注:图床配置名是根据 图床设置
自己设置的,并非一定为 “SM”
参考资料:GitHub - juzisang/picgo-plugin-compress: Image compression plugin for PicGo
经测试,同样一张截图,系统直接保存图片 127KB,通过插件压缩上传后 39KB,压缩效果可以,主要是实现了自动化
实际上,对于非博客中的文章,如自己的一些笔记,当然还是插入本地图片更方便。插件作者在设计上增加了一个控制开关,在 MD 文件的 YAML 区添加 image-auto-upload: true
才实现图片粘贴上传功能 —> 因此,可以利用 QuickAdd + 模板 (配置好 YAML 区) 来实现「只有某一种模板的文件,向其中粘贴图片的时候才会自动上传到图床中」
1 | title: {{NAME}} |
文件同步问题
面临的问题:Ob 资源文件夹路径和 hexo 文件夹路径不在一块,如何将 hexo 中包含 markdown 文件的文件夹导入到 Ob 资源库中是一个问题
尝试 1:使用 rsync 命令工具
1 | rsync -avzh --delete /Users/wuzhipeng/Documents/ZhPObsidian/ZhPObsidian/_posts /Users/wuzhipeng/ZhPblog/source |
选项说明
-a
或--archive
:以归档模式同步文件,包括保留文件权限、时间戳等元数据。-v
或--verbose
:显示详细的输出信息。-z
或--compress
:使用压缩传输来减少数据传输量。-h
或--human-readable
:以易读的格式显示输出信息。-n
或--dry-run
:模拟同步操作,不实际同步文件。-P
或--progress
:显示同步进度。--delete
:在目标目录中删除不存在于源文件夹中的文件。--exclude
:排除指定的文件或目录。--include
:只包含指定的文件或目录。--bwlimit
:限制带宽使用。
的确可以同步,但这样做有几个明显的缺点:
- 单向同步:如果双方都做了修改,那么需要左右来回同步一次,容易出错
- 同步错误:虽然同步是成功的,但是有报错的出现且暂时无法解决,用起来不放心
1 | rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/c2cb9645-dafc-11ed-aa26-6ec1e3b3f7b3/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) |
尝试 2:软链接
1 | ln -s /Users/wuzhipeng/Documents/ZhPObsidian/ZhPObsidian/_posts /Users/wuzhipeng/ZhPblog/source |
没想到 Ob 支持软链接,这样 hexo 和 Obsidian 访问的就是同一文件目录,不涉及同步问题,这样也很稳定,目前使用的就是这种方案
注意事项:
- Ob 中的一个文件夹软链接到 Hexo 中,需要首先删除 Hexo 中的对应文件夹,比如以上中的
_posts
文件夹
购买 Obsidian 官方同步之后
仍然是使用软链接方案,删除软链接文件夹,将 Obsidian 本地库的对应文件夹路径粘贴替换一下即可。目前软链接的文件夹有:_posts
、about
、download
、notes
1 | ln -s /Users/wuzhipeng/Documents/SynZhPObsidian/SynZhPObsidan/_posts /Users/wuzhipeng/ZhPblog/source |
1 | ln -s /Users/wuzhipeng/Documents/SynZhPObsidian/SynZhPObsidan/download /Users/wuzhipeng/ZhPblog/source |
1 | ln -s /Users/wuzhipeng/Documents/SynZhPObsidian/SynZhPObsidan/about /Users/wuzhipeng/ZhPblog/source |
1 | ln -s /Users/wuzhipeng/Documents/SynZhPObsidian/SynZhPObsidan/notes /Users/wuzhipeng/ZhPblog/source |