Obsition + Hexo 上传
已完成教程:
- https://zhuanlan.zhihu.com/p/554333805
- Hexo + Obsidian + Git 完美的博客部署与编辑方案 - 掘金 (juejin.cn)
未完成教程:Hexo&Obsidian不完全工作流 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
1.目录结构

打开 obsition
2.忽略多余的文件
我们主要是编辑和管理Markdown文件,所以一些多余的文件要忽略掉,这样在知识库里搜索文件、关键字时才不会搜索到多余的,也能有效提高检索效率。
打开 设置>文件与链接>Exclude Files

文章都在source下,所以只保留source,其它的忽略掉

3.博客文章管理
3.1 新建文章
新建Markdown文件就很方便了:

可以设置下新建Markdown文件生成的位置:

3.2 快速插入Front-matter模板
Obsidian有一个模板功能,允许我们预先写好一些内容模板,写文章时可以随时快捷插入。
在核心插件中开启模板功能:
打开模板插件的设置界面,设置模板文件夹位置以及日期格式:

编写Front-matter模板:

在左侧菜单栏中点插入模板:

4.Obsidian Git插件的使用
Obsidian知识库多端同步,我之前一直用的方案是OnDrive,除了.obsidian文件夹下个别文件会出现冲突以外,各方面都挺不错的。但是现在加入了Hexo博客后,冲突恐怕会更多,OnDrive没法处理,显然用Git来管理会更好,还有Hexo博客要部署到服务器一般也是用Git。
得益于Obsidian强大的插件生态,我们可以在Obsidian中直接操作Git,用到的是一款社区插件,叫做Obsidian Git
4.1 安装
先设置里启用社区插件功能,然后再搜索安装即可:
要确保知识库是一个Git仓库,打开才不会报如下错误:

4.2 忽略配置
根目录目录下创建.gitignore,
1 | .DS_Store |
忽略掉.obsidian/workspace

4.3 使用
打开插件设置界面,可以修改一下自动提交和手动提交的日志,我设置的是主机名+日期:
在提交信息设置里,可以修改主机名和日期格式,修改完成后点Preview可以预览提交信息:
快捷键Ctrl + P打开命令面板,输入open source control view启用可视化操作面板:

然后在右侧菜单栏就可以看到操作面板了:
一般操作就是:保存所有>提交>推送,就可以更新到Git服务器了,如下图顺序

启用自动拉取功能,每次打开知识库就会自动拉取:

如果在使用过程中有报错的话,Ctrl+Shift+I在控制台里可以查看详细日志,所有插件的日志都可以在这里看到:

5.自动更新Front-matter分类信息
前文我们实现了Front-matter模板的快速插入,但是有些变量如categories还是需要手动维护。结合Obsidian,最好的方案就是我们通过文件夹来对文章进行分类,然后自动生成和更新Front-matter的分类信息。
5.1 hexo-auto-category安装与配置
这里我们使用的是hexo-auto-category这个基于文件夹自动分类的插件,安装:
1 | npm install hexo-auto-category --save |
在站点配置文件 中添加配置:
1 | # Generate categories from directory-tree |

6利用Git钩子函数触发更新
6.1 根据文件目录自动生成 categories 信息
虽然我们把文章放的井井有条了,但是每个文章里的 categorys 字段还是要我们手动自己维护的,比如在 source/_post/前端/Javascript/Javascript原型链机制.md 文件中,我们要通过手写 categories 来让 hexo 知道这篇文章被放在 前端-Javascript 分类下:
1 | title: Javascript原型链机制 |
为了省去手动维护 categorys 字段的这个问题,我们可以使用 hexo-auto-category 这个插件。这个插件在 Hexo 进行 build 的时候会去自动根据文章目录情况来自动修改文章的 categories 信息,更详细的部分可以看作者的文章。
除此之外最好修改一下 _config.yml 中的两处默认配置:
1 | # 修改 permalink 让你的文章链接更加友好,并且有益于 SEO |

6.2 提交代码时自动生成新文章的 categories
但是这里有一个问题,就是只有 hexo 在执行 hexo generate 或者 hexo server 时候才会去触发 categories 的生成,那么每次我们创建文章都要经历这样的工作流:
- 创建分类目录,写文章,文件名推荐与文章标题一致(不用关心
categories写什么); - 填写
title、date、tag等元信息(这个文章后续再讨论如何省去这一步); - 执行
npx hexo generate在构建博客的时候触发hexo-auto-category插件的自动矫正categories功能; - 检查文章中的
categories是否正确; - 添加 git 工作区变更,并提交并推送代码到 github。
为了简化这些工作,我们可以使用 git hook,在我们每次执行 commit 前都自动运行 npx hexo generate 触发自动生成 categories 的行为,并将生成后的变更自动添加到本次提交中,然后一同 push 到 github 上去。这里可以使用 husky 来很方便的设置这样一个 git hook。
GitHook 可以在执行代码的 commit、push、rebase 等阶段前触发,做一些前置行为,比如在每次提交代码时候执行一段 shell 脚本,来做一些代码检查或者通知 ci 等操作。
Husky 采用了更简单的一种方式,让管理 GitHook 更加现代化
关于 Husky 的使用可以参考我之前的文章《使用 husky 每次提交时进行代码检查》
你可以按照如下步骤快速完成设置:
- 安装 huksy:
npm install husky --save-dev - 执行 huksy 初始化指令:
npx husky install - 在
package.json中的scripts中写入:"prepare": "husky install" - 在生成的
.husky目录创建pre-commit文件(有的话就不用创建),并写入以下内容:
1 | #!/usr/bin/env sh |
如果提交代码的时候,终端出现类似的构建过程,就说明由 husky 创建的 git hook 生效了:
这样你新建一篇博客的工作流就简化为:
- 创建分类目录,写文章;
- 填写
title、date、tag等元信息; - 添加 git 工作区变更,并提交并推送代码到 github。
这样就解决了令人头疼的文章分类问题~
7 使用 File Tree 插件
Obsidian 很不好的一点就是会把所有的文件都列在左侧的文件列表中,但是对于我们的 Hexo 项目写文章来说,我们只会修改 _post 目录下的文件,因此我们希望左侧的文件列表中只显示 _post 文件夹,但是目前为止 Obsidian 并没有推出类似『聚焦』到某一文件夹内的功能。
好在 Obsidian 强大的插件库中有一个 File Tree Alternative Plugin 第三方插件可以满足这一需求。按照 Obsidian Git 相同的方法去下载这个第三方插件,下载完成之后我们会发现左侧菜单出现了一个 File Tree 的 Tab 页,点击后就可以看到文件以树形的结构呈现:
我们展开 source 文件夹,并右键 _post 文件夹,选择 Focuse on Folder 后,左侧的文件列表中就只会显示 _post 文件夹中的内容了:
8.快捷操作
Obsidian中通过URL可以访问链接或打开文件,所以我们可以在根目录创建一个Markdown文件,相当于我们知识库的主页,把一些常用的链接放这里,方便快速访问:
在写URL的时候要注意:如果路径有空格的话,要替换为%20
8.1 快捷打开站点或主题配置文件
站点配置文件和主题配置文件是我们DIY博客经常要编辑的两个文件,在Obsidian中没法编辑yml文件,可以通过URL来打开yml文件,会自动调用默认的编辑器打开。
在主页Markdown中,按Ctrl+K插入链接,写入我们两个配置文件所在的相对路径:
1 | [打开站点配置文件](Blog/_config.yml) |
效果演示:
8.2 快捷运行博客
我们还可以运行bat文件来执行一些命令,比如运行我们的博客了。
在我们的Hexo博客目录下,创建一个RunBlog.bat文件,写入以下命令:
1 | start http://localhost:4000/ |
然后在我们的主页添加链接:
1 | [运行博客](Blog/RunBlog.bat) |
效果演示:(测试完成后,按两次Ctrl+C关闭)
8.3 优化方案
8.3.1 嵌入文件
觉得链接太小了不好点击?Obsidian嵌入文件完美解决,只需在链接前加上感叹号!(注意嵌入文件的链接就不能用Obsidian URI的形式了)
1 | 打开站点配置文件 |
是不是瞬间舒服多了?
