obsidian + hexo = my blog

  • 使用 obsidian 进行 hexo 静态博客写作

  • 资料来源:

    <>

  • 更新

    1
    2021.09.14 初始

导语

目前 obsidian 是个人的主力笔记应用,撰写 blog 主要也是 obsidian.这篇博客会汇总一下写 hexo blog 用到的 obsidian 插件/配置.还有未尽的事项.

正文

使用 obsidian 写 blog

  • 博文模板
  • markdown 格式化,时间元数据更新.
  • git 推送

分别对应 3 个插件 Templater obsidian-prettifyobsidian-git.

  • Templater 是模板文件,提供了相当丰富的调用.显然因为不了解 js 目前只用了皮毛.
  • obsidian-prettify 提供了 md 的格式化,并且还有时间元数据更新.
  • obsidian-git 提供了 git 的调用,我并不关心 blog 仓库的 commit 信息,只要推上去就行.

Templater

先看看对模板生成的要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
title: obsidian + hexo = my blog
categories:
- 工具
tags:
- obsidian
abbrlink: 20210914033600
mathjax: true
date: 2021/09/14 12:00:00
updated: 2021/09/14 12:00:00

---

- 使用 obsidian 进行 hexo 静态博客写作

- 资料来源:
> <>

<!--more-->
  • 标题/分类/标签
  • abbrlink 唯一链接
  • date/updated 的时间,updated 特殊一点还要能在修改博文后更新时间.
  • 其他的固定内容若干.

obsidian 内置了模板应用,最开始也是使用自带的模板,能够方便的生成时间,但是也就这样了,还是要一遍遍手动输入 标题/分类/标签.

Templater 提供了基于 js 的模板支持,也内置了非常强大的函数.具体使用请参考 官方文档.基于 Templater 基本能覆盖上面生成的要求.

实现

目前本地的博文标题和本身文件名是相同的,即这一篇 obsidian + hexo = my blog 对应的文件是 obsidian + hexo = my blog.md.

新建文件时,输入标题使用 tp.file.rename 重命名文件为 title.md.

分类是按照文件夹\子文件 来的,这一篇就是 工具\obsidian + hexo = my blog.md.

生成 categories 时,是直接读取当前文件所在路径.<tp.file.folder(true).

标签的种类优先,目前只是调用 tp.system.suggester 从一些固定标签中选择一个,或许熟悉 js 以后能做更好的定制.

一段前言的说明是调用 tp.system.prompt 捕获用户的输入.

abbrlink 要求生成唯一的字符串,这里取巧,直接使用 tp.date.now("YYYYMMDDhhmmss") 取时间到秒替代.我才不会说我不懂 js 呢…

其他固定内容按照需要生成.

模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%*
const title = await tp.system.prompt("title");
await tp.file.rename(`${title}`);
_%>

---
title: <% await `${title}` %>
categories:
- <% tp.file.folder(true) %>
tags:
- <% await tp.system.suggester(["null","vscode","obsidian","iptable","dns","Raspberry Pi","荒唐言"], ["null","vscode","obsidian","iptable","dns","Raspberry Pi","荒唐言"],false,"tags") %>
abbrlink: <% tp.date.now("YYYYMMDDhhmmss") %>
mathjax: true
date: <% tp.date.now("YYYY/MM/DD") %> 12:00:00
updated: <% tp.date.now("YYYY/MM/DD") %> 12:00:00

---

- <% await tp.system.prompt("general") %>

- 资料来源:
> <>

- 更新

```vim
<% tp.date.now("YYYY.MM.DD") %> 初始
\```

`<!--more-->``

obsidian-prettify

obsidian-prettify 可以对 md 文件格式化,对我而言,内置的格式与平时默认的习惯恰好符合,因此不用特别更改.

更新时间元数据,是另一个重点功能,更新模板配置为 updated: {{date:YYYY/MM/DD hh:mm:ss}},这样调用每次进行格式化时 updated 字段都会是最新的时间.(因为 blog 现在是默认按照更新时间排序)

obsidian-git

基本也是开箱即用,配置好推送和拉取快捷键.

未尽

一大遗憾还是 obsidian 双向链接 暂时无法直接用在 hexo 上.

[[title#章节]] 类似的格式可能需要有一个 hexo 的插件,在每次生成 blog 时替换成真正的网址,才能完全兼容.只能继续等或者尝试学一下 js.