软件介绍
有没有一款笔记软件,能够同时实现:
- 记录:打开即能记录
- 复习:对做过的笔记进行复习和回顾。
- 写作:支持markdown,支持搜索笔记库并插入,支持快速地引用
- 任务管理
- 日程管理
- 双向链接
- 知识图谱
- 大纲视图与写作视图
- 发布:能够方便地进行公开发布和分享
- 能够方便地对流程图、甘特图、思维导图、概念图等进行编辑和修改
在过去,很难想象能有这样一款软件的存在。如果有,那可能是一个极为臃肿和门槛极高的软件。但现在,他来了。
Obsidian。
这是一款基于markdown文档的笔记管理软件。初看没有什么特别的,但由于高度的开放性、活力十足的开发团队(更新非常频繁,而且往往会带来用户想要的功能)和友好活跃的社区,让这款软件充满了各种各样的可能性。
无论是笔记小白,还是技术大牛,都会在这款软件找到自己喜欢的特点。如果没有,就自己魔改甚至写个插件。是的,这款软件就是如此充满可能性。
接下来,我会尽力把目前自己对这款软件的使用心得全面地写出来,希望能够帮助到正在或者准备使用Obsidian的朋友。
本文的结构是,先介绍个人的软件工作流,包括笔记、复习、写作、整理和归集等(已移动到https://www.yuque.com/docs/share/5476207c-8ad2-4e23-b342-31f1f5681470?# 《00 Ob个人工作流》),让大家对这款软件的使用场景有一个具体的了解。再逐一介绍在工作流中使用到的插件、模板和设置方法。最后,会把个人用到的插件、主题和代码打包到云盘,发给大家。
另外,为了照顾新手,本文在操作部分会比较啰嗦(如果不够啰嗦,也请留言提醒)。对于想要从中获得某些新想法的朋友,可以直接根据目录定位到感兴趣的内容。
软件安装与库的创建
软件下载地址:https://obsidian.md/
软件安装路径:随意
安装之后,第一次打开软件会跳出如下页面:先把语言切换成中文,再点击创建新库,就可以自由选择笔记要存放的路径。需要注意的是,这个创建的库文件夹不仅仅是放笔记的地方,也是放配置文件的地方,诸如外观、插件、css文件等都会存放到这个库文件夹里面。
如下图,这就是我们创建的库文件夹,我们新建的所有笔记都会放到这个233文件夹里面。已有的.obsidian就是上面我们说的存放插件等配置文件的地方。创建新库的时候,如果要保持新库和原库的设置一样,就可以把原有库中的这个文件夹,替换掉新库的,两个库的设置就保持了一致。
顺便说一句,正因为这个原因,在多台电脑同步的时候,只要把233整个文件夹同步,再到新电脑中点击打开库文件夹,选中同步过来的233文件夹,就可以实现两个电脑的同步。移动版也是同理。(目前插件设置还需要再做一遍。不过.obsidian的同步已经提上了日程,相信很快就会实现。)
日记设置与Day planner
打开笔记界面,打开设置,找到核心插件,把日记插件打开。

就会看到插件选项下方多出了一个日记,点击,即可开启日记的设置。
- 日期格式:默认创建的日记文件的名称格式,默认的YYYY-MM-DD生成的就是像2021-01-01这样的格式。
- 新建日记存放位置:即创建的日记文件的默认保存路径。我个人是每个月设置一次,自动保存到对应的月度文件夹,方便做月度复盘。
- 日记模板位置:这个非必选。主要是用来对日记文件的内容作出规定的。比如说希望自己的日记里面有工作记录、健康记录、每日灵感等,就可以先设置好日记模板,并在这里选中,以后每天生成的文件就都有这些要素了。
- 启动时打开日记。实现每次打开Obsidian就自动打开日记页面。
模板插件与YAML
开启方式同日记插件。
官方的模板功能主要是用来在现有笔记文件中插入模板文件中的内容的。比如插入事先调整好的笔记框架(目录、标签、日期等)。
官方提供了一些自动化的可能性。比如我们希望每一篇笔记中都有插入当天的日期,就可以在模板文件中加入:{{date}},当你插入到新笔记的时候,这个代码就会转化为当天的日期。此外,还可以对这个日期的格式进行自定义。具体参考官方提供的案例。
简单来说,就是模板可以插入可变字段。这一点在官方插件中功能较少,我们后面提到的Templater插件会带来更多的可能性。
不过,在介绍Templater之前,请允许我先来简单介绍一下YAML是个什么东西。
简而言之,YAML就是关于这个笔记的信息。比如要设定某笔记的类型,可以写上:
—-
category: note
—-
这样被一对「—-」围起来的一条信息,称为一个Front Matter。为了方便表述,前面的category就让我们称为名称,后面的note称为参数吧。
这样的一条信息,就让软件知道了这页笔记的category是note(我们也可以在后面写上中文,如文章、书籍等)我们再对笔记进行归集和整理,就会非常地方便。
想深入了解YAML,可以到https://www.runoob.com/w3cnote/yaml-intro.html学习。
个人认为,只要把握三点就可以:
- 必须写在笔记开头,并且三个减号、冒号都必须都是英文,冒号后面要有空格,否则就无法被识别。
- 前面的名称最好是英文,虽然是中文也可以,但可能会出现问题。
- 参数可以随便写,也可以有多条。有多个的时候,要用英文逗号隔开,并用[]把所有的参数括起来。
附上个人常用的:
—-
Type: article
Creation_date: <% tp.file.creation_date() %> #Templater的参数,在模板文件中设置好,插入模板进笔记时就会转换成创建时间,以避免文件移动和同步时文件的属性被更改,导致笔记的日期出现混乱
M_time: <% tp.file.last_modified_date() %>
Pushtime:
Author:
Status:
URL:
—-
[
](https://shimo.im/docs/jhVQPrwJhpj6W3QQ#anchor-hBka)
Templater与插件安装方法
Templater是第三方插件,需要到下图这个地方来下载。(需要科学上网,否则可能会显示:无法连接到插件社区)
无法下载的,可以按照如下步骤安装:
退出ob,找到上面说的库文件夹中的.obsidian文件夹,新建名为「plugins」的文件夹,再把下载好的插件放进去,像这样:
文件名是什么无所谓,关键是要有一个文件夹,里面包含这些文件:
所有的插件都可以通过这个步骤安装。
安装启动之后,就可以到这里来进行插件的设置。
设置1:与模板插件一致,即默认从这个文件夹选取模板。
设置2:这个是类似于上面说的{{date}}的参数,即可以实现根据笔记标题、日期等变量插入到新笔记中。这里提供的参数比上面介绍的模板插件要多得多。
https://silentvoid13.github.io/Templater/
设置3:这个的意思是,新建文件的时候,会自动把4预设好的模板文件中的内容拉取过来。比如下面的,就是根据「笔记模板」新建一个文件。
这个插件提供了更多的快捷操作:
按ctrl+P就可以找到如下指令:
Insert Template,与插入模板一致,只不过是这个插件设置好的文件夹,与官方预设的插入模板指令不同,但功能一致;
Jump to next cursor location:没用过。
Create new note from template:从模板创建新笔记,即新建笔记并从选中的文件复制内容。注意这个与上面的Trigger Templater on new file creation(TToNFC)是不同的,上面的是新建文件的时候自动拉取,而这里是根据选中的模板新建。这个功能要比 Templater on new file creation更快捷。
Obsidian的付费项目
- 个人版
- VIP 100刀 享受最先的更新,如手机版内测
- Supporter 50刀(在VIP之后内测)
- Insider 25刀(在supporter之后内测)
- 商用
- 50刀每年
- 同步功能 4刀每月,目前只能按年购买
- 发布功能 8刀每月
注意,以上付费项目,都需要在官网上根据指示付款,然后加入Discord(同样需要科学上网),找管理员,他们在后台开通之后才能使用;或者根据要求发送邮件,但就比较慢。
Spaced Repetition
个人非常喜欢的一款插件。作用是根据SM2算法实现笔记的间隔复习。效果如下:

空格即显示答案,按数字1、2、3分别标记为Hard Good Easy;按s键跳过。
怎么设置呢,先到第三方插件社区下载spaced repetition安装启动。
然后进行如下设置:
重点是四个地方:
- 在flashcard tags后面,写上需要复习的笔记上打上的标签,比如所有打上#flashcards的笔记需要复习,就在后面这个边框里面输入#flashcards;如果有多个,比如#note、#英语,只要用空格键隔开即可。
- 在Separator for inline flashcards后面是英文的::——行内分割符。意思是如果识别到带有上面1所设置的标签的笔记,::后的会作为答案被隐藏。
比如 1+1::2,那么生成的卡片就是1+1,点击一下show answer 就会出现2。
- 如果想要隐藏的内容较多,则用到下面的Separator for multiline flashcards,后面是英文的问号?,格式如下:
1+1 ? 2
效果如上面的第二条。
- 调出知识卡片的按钮(左上角)

注意,这里的::和?都可以自由设置,比如=?=等等。关键是,应该是独一无二的符号,因为如果容易重复,就会生成大量自己不想要的复习卡。
(必读)最强大的插件——dataview
概括来说,dataview的作用是,动态归集并展示笔记。可以通过简单的代码对笔记进行查询和管理。学过sql语言的朋友应该非常容易理解。
通俗来说,就是可以根据笔记的属性(如文件名、大小、路径、创建时间、最后修改时间、标签等),对笔记进行归集。实现类似于下图的效果(dataview的结果要到预览模式中查看):
代码:
table _Pushtime_, _URL_ from "" where Author = "L先生" sort Pushtime desc
先来看dataview的基本语法:
[**list|table|task**] field1, (field2 + field3) **as myfield**, ..., fieldN**from** #tag or "folder" or** [[link]] or outgoing([[link]]) ****where** field [>|>=|<|<=|=|&|'|'] [field2|literal value] (and field2 ...) (or field3...) 【and和or表示可以多条件查询,and是同时满足,or是满足任一条件就会被拉取】**sort** field [ascending|descending_|asc|desc_] (ascending is implied if not provided-默认正序)
首先,开头和结尾必须是三个英文的单引号。
红色部分是三种基本功能:
list:清单,即只列出笔记的名称清单;
table:如上图的示例,可以选择呈现什么表头,默认第一列是file(文件名),所谓field1….n就是表格每一列的标题,比如上图就是通过设置Pushtime、URL两个field得到的。理论上,通过
上文介绍的YAML,表头可以是任意的内容。
task:待办事项。拉取符合条件的所有待办事项。
from:从什么地方拉取。上面的基本语法中,依次是从标签中、从某个文件夹中(注意文件夹要加上双引号)、链接了本笔记的所有笔记、本笔记链接的所有笔记;
where:满足什么条件的才会被抓取。比如上图的文章列表,就是通过设置Author=”L先生”筛选出来的。
sort:根据什么排序。sort 后面跟一个field(即某一列的标题,比如文件创建日期等),默认是正序排列,如果需要逆序,就使用desc。
以上就是dataview的全部语法了。非常非常简单。
其中核心就是list/table/task,这个要素是不可或缺的。如果没有from,就会自动拉取库中所有的笔记或待办事项。
让dataview发挥无限魅力的,就在于筛选功能——where。
可以被筛选的,就是field。
这里得稍微花点篇幅来讲一下field。什么是field呢,比如在excel做了一个表:
| 序号 | 性别 |
|---|---|
| 1 | 男 |
| 2 | 女 |
| 3 | 女 |
| 4 | 男 |
序号、性别就都是field。对性别进行筛选,如where 性别=男,就可以筛选出所有性别为男的数据。
在obsidian中,field就是笔记文件的信息,当设置某个fieldA=某个值的时候,所有笔记文件中fieldA为该值的笔记就会被拉取过来。
主要有三种:
最基本的,就是笔记自身带有的创建日期、名称等信息。如下表:
但是,如果仅仅是这样,那dataview可以做的事情还是相对有限。
但别忘了,前面我们简单介绍过YAMLhttps://shimo.im/docs/jhVQPrwJhpj6W3QQ#anchor-tVjB
我们可以随性所欲地为笔记设置front matter,从而方便快捷地用各种各样的筛选条件来归集笔记。
这个就需要大家根据自己的需求发挥想象力了。
个人的几个应用场景:
- 归集每日/每周新建和修改的笔记,只需要where file.ctime=date(2020-05-01)就可以了。不过,因为文件同步、迁移的时候,可能会更改笔记文件的创建日期,导致不准确,所以最好在front matter中自行设置(此处表扬一下Templater,像这种创建日期之类的信息完全可以在创建笔记的时候自动生成,见YAML部分)
- 归集关于某本书、某篇文章的笔记。我每次阅读一篇文章、一本书,都会新建一页笔记专门用来记录这本书的作者、阅读日期和读后总结。而读了这些文章、书籍,记录的笔记后面会插入对应文章、书籍的笔记链接。那么我就可以设置一个固定的模块,自动生成相关的所有笔记文件。——比如说,读了「如何让大脑保持年轻与健康?」,我做了如下笔记:

这里用的代码是:
table creation_date as 创建日期 from [[如何让大脑保持年轻与健康?]] #如果不想用英文,也可以自己给表头重新命名,只要用 as+新名字就ok。 #2 再懒一点,我希望我每次新建一个文章笔记,就能生成这段dataview代码,我只需要把它写到一个模板文件里面,到时候插入到新笔记中就可以。可是如何实现自动替换[[]]中的内容呢,一个参数:<% tp.file.title %>sort creation_date desc
模板中的代码如下:
table creation_date from [[<% tp.file.title %>]]sort creation_date desc
- 归集所有的书籍笔记,定义好笔记的category是book即可
- 归集所有的电影笔记;
- 归集所有的文章(article)笔记,把URL也设置好,就可以形成一个阅读列表,如上面的示例
- …
利用好标签、YAML、dataview和知识图谱,再结合ctrl+o快速打开笔记、ctrl+p快速使用命令面板,就完全可以不对笔记进行分文件夹的处理了。
