obsidian
概述
hexo+github 的工作流程在blog迁移中已有提及,此处不详述,只谈谈编辑器优化。
之前我写blog用的是notion+typora,每次写新博客就要hexo new post [title] 一下,然后很费劲地手打文章frontmatter里的tags和categories(tab键按烂了不说,每次还得翻回旧博客看看categories的格式怎么打)。正好这几天发现obsidian的白板挺好用,于是开始学习obsidian的用法----惊为天人。多么人性化的用户界面!多么赏心悦目的主题设置!多么精彩纷呈的插件广场!(多么令人担忧的打开速度) 总体来说,obsidian是一款花费3小时的学习配置成本就能变得非常好用的编辑器。(那我80块买的typora怎么办=w=)
既然obsidian作为编辑器比typora强上不少,那么做一些小改动、让它适配于hexo+github的博客体系就可以了。下面具体介绍这些改动。
插件
事实上,作为知识库的obsidian和作为blog编辑器的obsidian需要的编辑器差不多,因为它们都需要基础的markdown编辑、git同步、图片插入等功能。
核心插件
核心插件中的大多数都很有用,可浏览一遍酌情开启。其中最有用的是【模板】功能,可以指定文件作为模板,在新建文件中插入。~~我的天哪,这简直就是frontmatter的再生父母!~~该模板的具体设置如下:
-
title
- 留空即可
-
date
- 1743143468000 ,须在模板设置中定义时间格式
-
tags
- 属性类型设置为标签,就可以滑动选择了!
- 输入
#标签名以新建标签
-
categories
- 留给这位佬开发的插件解决:
npm install hexo-auto-category --save - 注意,第一次
hexo g的时候可能不会生成categories,需再运行一次。
- 留给这位佬开发的插件解决:
-
comments: true / false,属性类型为复选框
一般来说,用obsidian打开一个带frontmatter的md,它就会直接给你建好【笔记属性】栏。
第三方插件
好用的插件有:
-
editing toolbar 编辑栏
-
floating toc 悬浮目录
-
rescent files 快速打开
-
ZH 增强编辑
-
excel to markdown 粘贴表格
-
等等……
其中git插件可用于在obsidian内push,但前提条件是打开的obsidian库本身就是一个repo。像我这种blog repo在obsidian库下一层级的就麻烦了,用这个插件还不如直接git bash,所以此处请这位讲解(ta后面讲的快捷操作没太大必要,要改_config不如用VSCode)。
重要问题优化
图片插入和尺寸调节
typora的图片插入刚在blog迁移中搞定,obsidian的图片插入问题又来。好在解决方式简单:修改附件存放路径即可。
在【设置-文件与链接-附件文件夹路径】输入blog/source/imgs即可实现粘贴即插入的图片导入。
要调节图片大小,要么安装mousewheel image zoom插件,快捷键+鼠标滚轮调节;要么手动在图片链接后面加|500之类的缩放倍数。
obsidian暂且无法支持图片居中,默认居左,加|R居右。
但是怎么在博客上正常显示呢?
像下面这样配置【文件与链接】即可:

图片大小用 里面的[475]调就可以了。
双向链接
根据hexo-link-obsidian插件的readme走就行了。需要安装hexo和obsidian的插件各一个,我不想改文章的link,就麻烦点,自己加链接了。
加粗和尖括号渲染错误
加粗渲染只能通过在** 后面加空格解决,不得不说这渲染逻辑真是垃圾。
<>符号会导致后面的markdown语法全部失效,无法渲染。只能说obsidian在针对晶向簇。解决:像上文一样把<>放进代码块。
使用iSH+GitHub进行iPad+win双端Obsidian同步
***我的需求:windows端和ipad端互相同步。
学习了多种同步方法,发现主流同步方法都依托IBM cloudant、坚果云等等的同步软件,收费且容量小。
最终选择上传GitHub同步。难点在于ipad端的git操作(此处使用ish实现)。
主要软件:appstore的ISH 和 obsidian的Git插件
参考了:
https://forum-zh.obsidian.md/t/topic/10083
https://zhuanlan.zhihu.com/p/565028534
第一步:准备工作
-
在iPad上安装iSH应用(App Store下载)
-
在iPad上安装Obsidian应用
第二步:在iPad上创建Obsidian库
-
打开Obsidian应用,创建一个新的保管库(vault)
-
不要勾选"存储在iCloud"选项
-
点击"创建"
第三步:配置iSH并访问文件系统
-
打开iSH应用
-
首次运行时,需要安装git:
1
2apk update
apk add git -
设置git的用户信息:
1
2git config --global user.name "您的GitHub用户名"
git config --global user.email "您的GitHub邮箱" -
挂载iPad文件系统以访问Obsidian文件夹:
1
2mkdir -p /mnt/obsidian
mount -t ios null /mnt/obsidian在弹出的文件选择器中,找到并选择Obsidian文件夹(主文件夹,无需进入特定vault)
-
使用root用户远程管理
1 | |
第四步:克隆GitHub仓库
法一:SSH(推荐)
-
设置ipad端的ssh公钥:
1 | |
-
配置公钥到github等托管平台
-
进入文件夹,初始化,克隆/拉取:
1 | |
法二:HTTPS:(不建议)
-
导航到挂载的Obsidian文件夹:
1
cd /mnt/obsidian -
查看当前目录内容,找到您的保管库文件夹:
1
ls -
进入您的保管库文件夹:
1
cd 您的保管库名称 -
克隆您的GitHub仓库(替换为您的仓库URL):
1
git clone https://github.com/您的用户名/您的仓库名.git .注意末尾的点,表示克隆到当前目录
-
如需输入GitHub凭据,请提供您的用户名和个人访问令牌,其创建流程如下:
-
登录GitHub网站
-
点击右上角头像→Settings→Developer settings→Personal access tokens→Tokens (classic)
-
点击"Generate new token"
-
给令牌一个名称,如"iPad Obsidian"
-
选择"repo"权限
-
设置适当的有效期
-
点击"Generate token"并复制生成的令牌(重要:令牌只会显示一次)
第五步:同步操作流程
每次使用Obsidian时:
ipad端
-
开始工作前:打开iSH,挂载文件系统并拉取最新更改
1
2
3
4# 注意:for some reason, git 操作在ish容易hang(卡住)。解决方案:
mount -t ios-unsafe . /mnt/obsidian
cd /mnt/obsidian/Obsidian_notes
git pull -
在Obsidian中进行正常使用和编辑
-
完成工作后:返回iSH提交并推送更改
1
2
3
4
5cd /mnt/obsidian/Obsidian_notes
mount -t ios-unsafe . /mnt/obsidian
git add .
git commit -m "iPad笔记更新"
git push --set-upstream origin master -
22端口问题,则使用老生常谈的.ssh/config方法:
https://zhuanlan.zhihu.com/p/521340971 -
如果集成到了sh内,则运行命令:
1 | |
集成方法:
1 | |
windows端
事实上我搜到的教程都提到了obsidian的git这一美妙插件。然而令我恼火的是,git插件完全不适配移动端。
它在windows端确实好用:只需配置自动同步时间间隔,然后在需要时手动同步即可。commit也可自动插入日期。
问题总结
-
超大文件传输(如大部头的PDF)
不能上传过大的PDF文档。首先用.gitignore,但.gitignore可能出问题,没用就换成git-filter-repo --path "xxx.pdf" --invert-paths之类的插件:
1 | |
建议在.gitignore文件中添加.obsidian文件夹,因为每个设备的Obsidian配置最好独立保存。
-
linux命令行不熟悉
进文件vim,编辑i,退出编辑esc,保存退出:wq,再多就得问claude了。 -
沟槽的ISH小bug
多数时间都是hang在那里了。我遇到了2次hang,一次在git add .,用issue的神奇解法解决;一次在git push,后来发现是经典的22端口被防火墙屏蔽,就改成了443端口。 -
快捷指令陷阱
claude一直让我去弄ipad的快捷指令,搞了半天不得其法,还不如简单粗暴地mv git-pull.sh /usr/bin/obspull。
总之其他同步方法收费还算有道理,因为github同步的学习成本确实高。不过一个月40块还是太夸张了,负担不起。(不如去买个claude)