简悦+Logseq 搭建本地化个人知识库
最近在少数派上看到了 简悦 +Logseq 个人知识库搭建 | 从零开始完全指南 - 少数派, 一时间感觉打开了新世界,其实我很早就买了简悦 2.0,但由于一直没有很好的使用场景,外加配置实在过于复杂, 始终吃灰。直到看到这篇文章,发现原来简悦也可以直接跟 Logseq 打通,那么稍后读的最大弊端终于有了完美的解决方案。
不过实际按照教程配置的过程中,发现原作者是基于坚果云搭建的,不符合我本地化的思路(主要是公司不允许用云盘),因此尝试摸索一个本地任意文件夹均可实现的方案,过程中踩了非常多的坑,记录下来,希望对大家有帮助。
核心配置步骤
因为原文已经写的非常详细了,所以这里我不再一一列举配置,而是仅把本地化配置需要注意的事项标注出来。
安装同步与导出工具
这里坚果云不再是必选项,而是任意本地目录即可,注意必须要保证目录结构为 xx/SimpRead 才行,这个是硬性要求,否则会无法使用简悦的本地知识库功能。其实只需要在同步文件夹里选择一个名为 SimpRead 的文件夹即可,导出部分使用默认


详细服务设定参考原文,全部打开。
关于简悦知识库相关内容,可以查阅官方文档 建立知识库
通用&高级
- 自动同步相关参考原文,不需要做改动(也不需要覆盖本地配置文件这一步)
- 标注部分保持一致,确保导出时候一定要选
全文(含标注)+标注
服务
这里是配置大头,也是容易出错的地方,重点说一下。
【授权】
- 因为没有用坚果云,这里可以不用关心授权
【定制导出】
- 自定义标题一定要开,这个也是知识库使用的前提,同时标题必须要保证是
{{id}}{{un_title}}{{mode}}(这个主要是为了后面稍后读能够加载本地文件) - 模板部分,我个人做了一定的改动,这个可以自定义
tags:: #[[SimpRead]] {{tags}}
type:: [[Literature Notes]]
time:: [[{{date_format|now|yyyy-MM-dd}} ]]
source:: [{{title}}]({{url}})
desc:: {{desc}}
{{#each}}
- > [](<{{an_int_uri}}>) {{an_html}}
{{ - |an_note}}{{an_tags}}
{{/each}}
主要改动包括:
- 添加部分元数据,用于 Logseq 的 query 功能,例如: type、tags、time 等
- 标注部分把原文放在前面,同时加引文标识,自己的话放在后面,且添加缩进
效果图:

这里一定要注意,[[{{date_format|now|yyyy-MM-dd}} ]] 后面是有一个空格的,它不是作者笔误,而是必须要这样才能正常添加时间戳,参见: 定制导出 ,
增强导出(保持原文配置)
自动化
这里有一个坑花了我三天时间,必须要重点讲一下。
但这里更建议是保存为 Textbundle格式,因为离线 HTML 需要将图片转译为 Base64 的代码,碰到多图杀猫的文章很容易卡顿或失败。
因此在自动化中,我导出了 HTML、Markdown、Textbundle,结果就是,尝试了各种方案,包括数次卸载重装、排查本地端口占用、卸载同步助手重装等,都无法成功在本地使用 http://localhost:7026/reading/ 跳转文件,一直提示 404,
,中间尝试了各种方案,一度怀疑是否只能使用坚果云才能用知识库功能。 结果发现全部卸载重装之后,坚果云也无法使用,中间联系简悦作者 Kenshin 排查了很久,最终发现是因为同步助手无法识别 .textbundle 文件,导致不能正常建立索引。
这个问题有两种解决方案: 1. 放弃 Textbundle,改为使用离线 HTML 2. 通过文件规则,将 .textbundle 格式文件移动到其他目录下。我选择了第二种,原因就是离线 HTML 下载容易造成卡顿。不过遇到了另一个问题,那就是 Hazel 实在是太快了,在简悦刚开始创建 Textbundle 文件的时候,就已经把文件夹挪到了其他文件,导致此时简悦正在下载的图片找不到存放目录,引发大量报错。这个问题也卡了我不少时间,具体解决方案稍后单独介绍。
关于这部分,Kenshin 戏称说这个 issue 的长度可以在 2000 个 issue 里面排到前五,过程确实比较曲折,我中间走了非常多的弯路(不然也不会花掉一个周末的时间折腾),一度都想卸载简悦放弃了。有兴趣的同学可以看一下 自定义导出无法使用稍后读加载本地缓存文件 · Issue #3554 · Kenshin/simpread
第二个坑,这里原文作者也有提到,那就是稍后读的自动化流程,必须要在阅读模式下才可以,否则不生效, 参考: 部分操作方式加入稍后读时,无法触发自动化 · Discussion #2362 · Kenshin/simpread
开放平台(本地方案不需要,跳过)
定制导出
- 这里一定要注意: 必须要跟原作者保持一致,
http://localhost:7026/reading/路径是简悦知识库必须的配置,否则会导致链接无法跳转以及稍后读无法使用本地缓存文件。 - 另一个问题就是简悦存在 bug,刷新完一定要检查一下配置是否符合预期
稍后读后台设置
- 基本保持一致,唯一一个小改动点就是
,因为我只用简悦来进行深度阅读,并不需要在这里查看标注,所以通常都是进入阅读模式。
MD 文件自动移动(保持一致,使用 Hazel 即可,实际上后面我放弃了使用 Hazel)
至此,整个核心配置基本就已经完成了,我们实现的功能包括:
- 添加标注自动保存 HTML、Markdown 到 output 文件夹
- 标注文件自动移动到 Logseq 目录中
- 稍后读自动加载本地缓存 HTML 文件

优化点
Textbundle永久保存方案(Mac、Linux 适用)
接着上面提到的,详细展开一下如何处理 Textbundle 文件。
首先,我一下子想到的就是利用 Hazel,新建一个规则就可以,当我实际上这么操作的时候,发现遇到了简悦写入图片时文件夹已经被移动导致报错问题。
此时,我的思路是,如果有办法能够延长移动文件夹的速度就好了。但简悦跟 Hazel 是相互不知道的,很可惜的是 Hazel 中也没有配置延迟操作或者定时任务这一功能,那么我们只能想办法自己动手了(当然这里还有一条路,希望简悦后续的文件写入能够先把图片下载完,之后再生成文件夹)。
我想到的解决方案是使用 *nix 系统的 cron 功能,不了解的小伙伴可以看一下 linux - Why is my crontab not working, and how can I troubleshoot it? - Server Fault ,非常详细的介绍了 cron crontab 分别是什么, 如何使用,以及如何排查错误,受益匪浅。
这里需要做的事情非常简单,将所有后缀为 .textbundle 的文件移动到另一个目录中,实际操作起来并不简单,因为 mv 命令无法直接移动文件夹,而 textbundle 其实是一个文件夹而不是文件,包括了 json、图片以及 markdown,所以第一步就卡住了。我改为使用 rsync 来实现这个功能,可以很方便的把某个目录下所有的 Textbundle 移动到另一个目录。之后我们把源文件夹中的 Textbundle 文件删除。这里由于无法使用 Hazel 实现全部功能,那我干脆把移动 @annotate.md 文件的部分也放在自己的脚本里面实现了。完整的脚本文件如下:
#!/bin/bash
cd 你的目录/SimpRead
mv output/*@annote.md Logseq目录/SimpleRead/
rsync -axvP output/*.textbundle archieves(存放 Textbundle 的目录)
rm -rf output/*.textbundle
可以直接新建一个 simpread.sh 之后把上面的代码粘贴过去,记得把上面中文说明的部分都替换掉,同时为了手动执行方便,可以 chmod +x simpread.sh 一下。
然后就是使用 cron 让电脑自动执行这个脚本,这里可以使用 Crontab.guru - The cron schedule expression editor 这个网站调试一下定时任务,比如我目前的配置是每隔 5 分钟执行一次脚本。注意不能执行太频繁,否则一样会遇到简悦下载出错(5 分钟也不能保证完全不出错,理论上间隔越久,出错概率越小)。
具体的添加步骤(我是 Mac,以下请在命令行中执行)
export EDITOR='vi' (不是必须)
crontab -e
然后输入
*/5 * * * * /bin/sh 你的简悦目录/SimpRead/simpread.sh
之后输入 :wq 保存即可
提示: 
就代表定时任务添加成功,可以把 Hazel 卸载掉了。
快速进入稍后读
看到简悦同步助手里面有如何快速打开稍后读的方式,参见: 稍后读 ,我就琢磨了一下,感觉效率还可以再提高一下。
配置快捷方式
文档中把快捷方式跟独立窗口分开成两步,实际上 Chrome 浏览器支持直接创建一个独立窗口的 PWA 应用(关于 PWA,参考: Progressive web apps (PWAs) | MDN)。
打开稍后读: 
选择独立窗口:

然后你可以在用户目录下找到它

也可以通过 Alfred 或者 Spotlight 找到它

Manico 配置快速跳转
这里不得不强推一个效率软件了,官方网站: Manico - macOS 下的快速 App 切换器
基本上可以说这个软件是我目前每天使用频率最高的软件,应该没有之一,大概是 18 年左右 25¥购入。它的主要作用就是快速切换软件,比如你可以配置 option+1 打开 Chrome,option+2 打开微信等等,而且再次点击快捷键可以隐藏该软件,能够极大的节约软件切换的时间。这虽然是一款付费软件,但绝对是我在 Mac 上买过的最物超所值的软件。
核心配置:快速隐藏应用 
如何配置稍后读快速打开隐藏: 
总结
我一般的处理流程是手机浏览公众号或者 RSS 初筛到 Cubox,之后电脑上打开 Cubox,跳转到简悦进行深度阅读,添加标注,同步到 Logseq,之后进行定期整理。
这样,整个从文章到标注,到 Logseq 整理的过程就打通了。简悦作为一个稍后读软件,最大的亮点就是作为一个粘合剂,可以很好地跟各种笔记类软件打通,称为知识管理工作流中不可或缺的一部分,把浏览阅读到的信息和知识真正的经过深度阅读,让它有机会融入到已有的知识体系中,内化为自己的东西,就这一点已经远远超越了 Evernote、Cubox、Pinbox 等同类剪藏产品。
不过简悦问题也很明显,太极客了,配置使用成本巨高无比,我身为一个程序员,都好几次尝试无果弃坑了,个人感觉它的功能已经足够强大了,希望作者能够多花点心思在交互跟实际使用体验上,真的不需要再加那么多新功能了,适当的做减法非常有必要。希望我的踩坑经历能够对你有一些帮助。
简悦+Logseq 搭建本地化个人知识库的更多相关文章
- Cocos2d-x.3.0开发环境搭建之—— 极简式环境搭建
配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 使用此法可以方便的创建Cocos2d-x项目.如果需要运行Cocos2d-x引擎自带的 ...
- redis 集群搭建: redis-cluster
前言 redis数据存储在内存中, 就会受到内存的限制, 大家都知道, 一台电脑, 硬盘可以有1T, 但是内存, 没有听说有1T的内存吧. 那如果数据非常多, 超过一台电脑的内存空间, 怎么办呢? 正 ...
- 用Docker下搭建GitLab
最近试了一下Docker,发现用它搭建服务十分方便,就用它搭建了一个gitlab练练手. 首先下载gitlab镜像: docker image pull gitlab/gitlab-c ...
- CentOS 6.9/Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用
说明: 1.发现一个很奇怪的现象,CentOS和Ubuntu有着对用户不同的管理理念,比如CentOS中安装一切软件都是以root优先(su -),而Ubuntu则以当前用户优先,安装软件以sudo开 ...
- Cocos2d-x.3.0开发环境搭建
配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 前言:本文介绍在上述配置下进行游戏开发的环境搭建.开发语言为C++.如果读者不需要查看 ...
- web开发资源导航
实用工具 前端在线工具 兼容性速查 html5兼容性查询 node-es6支持度 es6兼容性表查询 设备es6支持度 游览器H5支持度 浏览器内核检测工具 手机设备信息检测 浏览器市场份额 文档手册 ...
- 万字长文---关于PKM收集与整理系统的思考和实践
PKM闭环中有一个很重要的环节就是信息输入,包括各种信息来源,例如微信公众号.博客.知乎.RSS等等,因此也就诞生了一大堆稍后读软件,如何真正有效的获取输入而不是做一只仓鼠是需要思考的.最近看了< ...
- 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
- 2014 年最热门的国人开发开源软件TOP 100
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外认可.中国是开 ...
随机推荐
- Solution -「BZOJ 3331」压力
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),令 \(u\) 到 \ ...
- RISC-V 特权指令结构
机器模式 机器模式(缩写为 M 模式,M-mode)是 RISC-V 中 hart(hardware thread,硬件线 程)可以执行的最高权限模式.在 M 模式下运行的 hart 对内存,I/O ...
- Tomcat是什么?
Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 如果你学过html,css,你会知道你写的 ...
- ApplicationStartedEvent与ContextStartedEvent有区别吗?
大家好,我是DD! 今天跟大家聊聊这个问题:ApplicationStartedEvent与ContextStartedEvent有区别吗? 对了,最近花了几周时间,把SpringForAll社区 3 ...
- 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...
- HDFS免重启挂载新磁盘
背景 在生产环境中,集群节点磁盘大小不同,其使用率也会不同,HDFS虽有均衡策略,但也会有数据不平衡的情况,有些节点磁盘就会被打满,然后这个节点就不健康了(Unhealthy Nodes),Yarn的 ...
- [Golang]一些书城项目中出现错误的原因和解决办法(二)
跟着B站尚硅谷的GoWeb教程写书城项目,整理一下自己写的时候出现的错误和解决办法. 错误三:数据库的 cart_items 表中 total_count 始终为 0. 原因:更新购物车信息的 Upd ...
- Docker仓库--registry与harbor
搭建私有仓库的两种方式: Registry Harbor 一.registry的搭建 docker官方提供了一个搭建私有仓库的镜像registry,只需下载镜像,运行容器并暴露5000端口即可. ...
- Python 中 base64 编码与解码
base64 是经常使用的一种加密方式,在 Python 中有专门的库支持. 本文主要介绍在 Python2 和 Python3 中的使用区别: 在 Python2 环境: Python 2.7.16 ...
- C# KeyValuePair<TKey,TValue>的用法
命名空间:System.Collections.Generic 构造函数:public KeyValuePair (TKey key, TValue value); 属性:只读属性 Key ,只读属性 ...