提醒:本文最后更新于 1374 天前,文中所描述的信息可能已发生改变,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。
信息时代知识的获取变得十分容易,在庞大信息流的冲击下,旧的知识尚在消化中,新的知识已源源不断地涌来,如果没有把获取到的知识整理的习惯,那么很容易迷失在这五彩斑斓的世界里。
之前我是没有记笔记的习惯的,就算会记我也不一定会回过头查看我记了什么,我对自己的记忆能力充满自信,这也使我吃过不少亏。算起来,我真正开始记笔记的时间应该是去年开学的时候。我把自己所学到的、值得记录的东西用手机自带的便签记下了,也是那时候,我开始写日记,不是写什么故事,只想记录下生活那些平平淡淡的点滴。渐渐的,我发现便签不适合我,我便开始了寻找……
在体验过众多笔记软件/平台后,我选择了 TiddlyWiki,这也是我用得最久的一款软件,TiddlyWiki 的的确确是一款优秀的程序,但我对于它的一些方面始终不是很满意,所以我并未停止寻找替代品,直到最近发现了 Trilium。与其它同类软件相比,它具有以下优点:
- 完全开源,可以自行编译或部署,具有多平台支持
- 不只是分层级,更可以无限嵌套
- 加密、历史版本、多媒体……这些该有的都有
- 有网页剪藏软件(我可以放弃Wallabag了
- 日记功能,这对我来说是一个重要的功能
- 可以自定义插件和模板
- 强大的Attributes 系统
- ……
惯例,我先上图:
这是一张官方的示例图片,截自客户端内,同时,也是第一次打开时看到的页面,其中包含了一系列使用文档。从图片就可以看出 Trilium 非常简洁、具有很高的辨识度。左边是一棵无限嵌套的文档树,中间是笔记编辑区域,右边是当前笔记的信息,包括笔记标签和关联笔记图表等。
开源,易于部署※
开源的优点不用多说,在写这篇文章的时候,恰逢Notion个人版免费了,我也去了解了这款软件,相比之下,我还是喜欢开源的 Trilium 。
release页面上有已经打包好的 Windows、Macos、Linux 以及 Linux Server 软件包,只需下载即可安装,Linux
Server 版的 Trilium 是用来同步的,同时也提供了网页写作的前端,我个人是比较偏好于网页端写作的,这也是我选择 Trilium 的一个主要原因。如今我将他部署在了我的树莓派上,如果你的托管服务器也是使用的
aarch64 的系统,可以用我编译的镜像: docker run -d --name trilium -p 8080:8080 -v ~/volume/trilium/trilium-data:/root/trilium-data --restart unless-stoped spirit1431007/trilium-arm
,回车之后数据便永久保存在了 ~/volume/trilium/trilium-data
。
关系管理※
作为知识库,关系可谓是其最重要的一部分,而 Trilium 在这方面做到了极致。
层级※
开头提到了,Trilium 支持无限层级,这其实不算是 Trilium 独有,不过它做的很很出色。每一级的文件夹都能写笔记,如果留空的话,就会默认显示该目录下的“子笔记”,不得不说,这种结构非常适合知识库,就像这样:
之前用 TiddlyWiki 虽然也能做到,不过那样得自己新建一个目录列表,且目录列表样式固定,不如 Trilium 来的快。顺带一提,Trilium
是支持随意拖动的,这就方便了我们对每条笔记进行分类整理。
克隆※
除此之外,Trilium 还支持一个很赞的功能:Cloning notes。简单来讲,就是我可以把同一条笔记链接到不同的目录里面,而不用在一条条去复制了,在编辑这条笔记时,所有的克隆版本都会更新,删除时也能选择是否全部删除。
引用※
知识之间是有联系的,作为知识库,免不了知识之间的引用和参考。与其他笔记应用中复杂的引用过程相比,Trilium 引用笔记十分方便——只需简单地输入一个 @
,之后会在 @
后面打字就会搜索并插入通往其他笔记的链接
不止如此,在链接了其他笔记之后,Link Map 组件也会实时更新,可以在右侧栏目看到
可以随意拖动,直到看起来满意为止。
关系图※
Relation Map 是 Trilium 的一种笔记形式,有点类似于思维导图
每个节点对应一则子笔记,鼠标悬停时可以预览,点击即可编辑。另外,比较有特色的是可以给关系加上标注。
属性※
Attributes 是每一个Trilium note的属性,分为4类:
- Labels(标签) - 简单的键值
- Relation(关系) - 指定到另一条笔记的关系(链接)
- Label and relation definition(前两者的定义) - 提升属性
要查看或修改属性,点击笔记右边栏目的show dialog
。
标签※
标准的标签用于分类,方便在回顾时更方便地找到。例如,在对书籍进行分类的时候,可以像这样添加标签:@dateOfBirth=1921-06-10
。查找的时候也非常方便,点击左上方的放大镜或者使用快捷键ctrl+s
,直接输入标签名字或者指定标签值,相关的笔记就会出现。当然,在Trilium中,标签也被赋予了其他的意义,比如定时任务可以用run
标签,排序可以使用sortd
标签,自定义外观时可以用cssClass
和 iconClass
标签。顺便一提,icon库是
boxicons。在 Trilium 中,标签是可以继承的,子笔记继承上一级笔记的标签,要如此,只需勾选 inheritable
栏的选框,同时,子笔记也可以拥有其他属性,且继承不影响它的兄弟姐妹笔记。
关系※
关系其实就是一种链接,用于将不同的笔记链接在一起,之前写到的引用也是一种关系,不过 Trilium 中的关系和其他笔记软件不太一样,除了能表示具体的关系,如之前的家庭关系图:笔记
"Prince Phillip" isPartnerOf 笔记 "Queen Elizabeth II.",此外,它经常与模板结合在一起使用。与继承类似,在使用模板(template
)创建子笔记(child:template
)、孙笔记(child:child:template
)时,创建的笔记会继承模板的属性,同时,创建的笔记会复制模板的内容,之后如果模板的属性更改了,更改会自动应用到所有使用该模板的笔记中。
提升属性※
提升属性使得标签或者关系更利于管理,它允许直接将相关的属性显示在笔记正文UI上,而不用每次修改或增加属性时都得点击一下show dialog
按钮。要做的这样,只需勾选属性中的 Promoted
项。
内容管理※
前面讲述了最重要的关系管理,已经可以看出 Trilium 的强大了,但我要说的是,它的内容管理做的同样出色。
编辑器※
Trilium 使用的是CKEditor 5 作为主编辑器,这是一款富文本编辑器。经过这段时间的使用,我觉得这是一款不错的编辑器,不过比起它我更喜欢使用 Editor.md。当然了,作为知识管理工具富文本比纯文本编辑器在某些时候更加方便。CKEditor同时也支持Markdown,这也是我觉得它不错的一个原因,对于我这种Markdwon老手来讲,几乎不会感受到转换的痛苦,不过对于md新手就有点不适了,因为它是所见即所得的md模式,这一点对于新手可能有点不友好。另外,编辑器支持导入导出Markdown,方便迁移其他平台的笔记。CKEditor的确不错,但有两点是我觉得不好的:不支持数学公式和代码高亮,这两个功能应该算是常用功能,但CKEditor没有,只能期待后续的更新了。
媒体和文件※
与常规存储方式不同,Trilium 把媒体和文件存储在数据库中,说实话我对这种做法不是很赞同,不过它也有一个显著的好处,那就是不用考虑引用资源的路径问题,还有因为是 sqlite ,所以在不同平台的同步和迁移时比较方便。图片和其他媒体资源可以在笔记里直接嵌入,作为子笔记来管理,同时,Trilium 还支持保存代码文件,可以选择代码语言并且支持高亮,这个功能很赞!
备份和历史版本※
历史版本※
历史版本是一个我又爱又恨的功能,Trilium 会在设定的时间内自动保存一份当前笔记的快照到数据库,可以在右边栏目中的 Note Revisions
查看,这有效防止了笔记的丢失,不过笔记的历史版本可能会占据较大空间,这也是我恨的地方,关闭又怕丢,不关又一大堆历史版本,所以每次我完成都会删除历史版本。如果要关闭某条笔记的定时快照功能只需在笔记属性里添加 disableVersioning
标签即可。
备份※
Trilium支持下面几种备份方案来备份数据库:
- 一天一次
- 每周一次
- 每月一次
- 在将数据库迁移到较新版本之前
各个操作系统上数据目录的路径如下:
- Linux:
~/.local/share
- Windows:
%appdata%
- MacOS:
/Users/$(user)/Library/Application Support
恢复备份只需要把当前db文件替换成备份的文件,再重启 Trilium 即可
加密笔记※
其实对于一款个人知识库软件来讲,加不加密无所谓,不过老外似乎很在意这方面的问题,所以,加密笔记也下了功夫,主要是以下两点:
- 根据用户的密码使用加密密钥对笔记进行加密。
- 这意味着,如果没有密码,加密的笔记是无法解密的,即使有人设法窃取了Trilium 数据库,也无法读取受保护的笔记。
- 有时间限制地访问受保护的笔记
- 类似于阅后即焚,不过 Trilium 把 “焚” 换成了加密,如需继续阅读,需要输入密码
需要注意的是:加密的不包括一些元数据比如修改日期、属性等;加密后的笔记其他没有密码的人也可以进行删除操作;搜索结果会自动排除加密的笔记。
模板和插件※
日记本※
这是我选择Trilium的主要原因,之前用WP写了一段时间的日记,也想过写一套WP主题来作为日记本,不过后来发现wordpress不太适合这项工作。在
Trilium 中,设置 Day Notes 只用将父笔记加上 calendarRoot
标签,需要注意的是,在整个文档树(即整个root目录)中此标签只能出现一次。点击右上方的Today
按钮即可自动新建一则今天的日记,同时,右边的侧栏也会显示一个日历表,点击表中日期即可快速跳到那一天的日记,标有下划线的日期即为今天。
在 Trilium中,日记类型的笔记与文字笔记没什么不同,所以像引用,标签,属性这些东西都完美支持。那么有意思的来了:我可以在日记中记下某个知识,再在其它笔记中直接引用它,或者直接创建一条克隆笔记,效率极其高!如此我便再也不用费心管理日记和笔记之间的关系了。
书单※
写读书笔记这件事我从没做过,不过 Trilium 提供了一个很好的思路,写完某一个章节的笔记后可以在父笔记中直接查看(支持折叠),能比较系统的回顾书中内容。另外,我发现在阅读人物关系比较复杂的小说中,结合前文所提到的关系图能比较清晰地梳理人物关系。
其他&自定义※
前文所提到的关系图也属于模板之一。另外,Trilium 还有两个完善度较高的模板:Task manager和Weight Tracker,不过这两个我偶尔使用,所以不做过多说明,相比之下,这两个功能手机端使用的多些,而且更方便。
Trilium 中的插件使用js编写,并且原生提供接口供用户使用。接口分为
- Frontend API,详看:https://zadam.github.io/trilium/frontend_api/FrontendScriptApi.html
- Backend API,详看:https://zadam.github.io/trilium/backend_api/BackendScriptApi.html
前面说的日记本的 Today
按钮本质也是一个插件,调用的 Frontend API ,同时结合了日记本模板的特性,所以做出了一个新建名字为日期的子笔记,在
Trilium Demo 中有插件的源代码,比较容易理解:
api.addButtonToToolbar({
title: 'Today',
icon: 'calendar',
shortcut: 'alt+t',
action: async function() {
const todayNote = await api.getTodayNote();
await api.waitUntilSynced();
api.activateNote(todayNote.noteId);
}
});
官方API文档十分简洁明了,可以直接上手操作,如果要自己编写插件,推荐直接对照着文档开发。
网页剪藏插件※
网页剪藏基本是优秀笔记软件的标配,可以这么说,在信息时代,如果一款笔记软件没有这个,那体验肯定是差其他软件一大截的。Trilium 原生支持API,所以有一个配套的
网页剪藏插件:
插件可以连接本地的软件或者远程的同步服务器,具有有以下功能:
- 保存整个页面
- 截图并保存
- 选中文字剪藏
- 选中图片剪藏
插件保存整个页面时,是直接发送当前网页的内容,同时会将图片也一并保存到新的笔记,与 Wallabag 发送链接后台抓取的保存方法有所不同。对于这个功能,我也不太好评价Wallabag与Trilium的好坏,毕竟两个程序的定位不同。另外提一句,新创建的笔记默认放在当日的日记下面,可以将要保存的位置的父笔记加上 clipperInbox
标签,该笔记就会变成剪藏笔记的根目录。同一天在同一个网址剪藏的文字都会放在同一个笔记下。