Obsidian — link
2022-03-07

有一次在 GitHub 上看到前同事关注了一个叫 logseq 的东西,我就好奇查了一下,然后顺藤摸瓜找到了一众知识管理软件,打开了这扇大门。

一直以来,都在等待一个活好不粘人的笔记软件出现。印象笔记出现的最早,但印象笔记收费后渐渐没了好感,后来有被安利过 notion,但我总觉得这货水土不服,就没有深度使用。因此笔记软件就一直空缺着,以至于最近两年,我因为没地方记录都没有留存下什么东西。

Obsidian 是我在搜索 logseq 时发现的,有人拿它俩做了详细的对比。我因为都还没用过,也就不理解他们讲的那些细微差别,所以就只能看颜值了,颜值方面 Obsidian 完胜。

obsidian

上面这张图是 Obsidian 网站首页上的介绍。它完美地完成了自己的使命,就是用一两句话把自己介绍明白。首先看大字:

A second brain, for you, forever.

A second brain,它把自己比作用户的第二个大脑,这的确切中了用户对知识库软件的期待——需要有一个地方去存放那些不容易记住的知识,在需要时还能快速调用。

For you 强调信息的私密性、安全性。如果把数据存放在 Obsidian 的服务器上,天然的就让人不放心。Obsidian 存的所有信息都是文件,放在一个文件夹里,也就很容易通过云盘来保存。对苹果用户来说,放在 iCloud 上再适合不过了,无需买 Obsidian 的付费存储服务,又保证了信息的私密性,一举两得。

一句话介绍底下的小字部分提到的 local folder 和 plain text 进一步打消了用户疑虑,让人觉得一切都简单熟悉,尽在掌握。

image-20220304094409223

Obsidian 最引人注目的特性,就是上面这张图所示的知识网络。这东西看着很炫,但是打造起来着实不易。况且就算把知识网络编织完成了,也未必会有很大的用处。它的重点不在于实用价值,而在于给人视觉冲击,为了成就这幅画面而产生做笔记的驱动力。做笔记这件事本身才是最重要的。

所谓知识网络,就是把一个一个的知识点通过链接的方式关联起来。本文要讲的就是 Obsidian 中链接(link)这个核心概念。只有掌握了链接的用法,才能真正体会到 Obsidian 的妙处。

创建链接

输入文字的时候,随手就可以创建链接。只要输入[[ 就会在光标旁立即出现一个备选链接的列表提示,可以从列表中选择一个,或继续输入进行文字匹配,迅速收敛可选范围。

把一个已经写好的字符串变成链接,方法是选中这段文本,然后按下 [[ 。Obsidian 会自动补齐后面的两个]],把它变成一个链接的形式 [[xxxx]]

虚实链接

虚实链接这对概念是我造的。实链接是说这个链接存在实际的指向,比如之前已经有篇笔记名为 exist,那么当我写下[[exist]]后就会创建一个指向 exist 这篇笔记的链接。

但如果我在写下[[not exist]]时 not exist 这篇笔记还不存在,链接依然会被创建,只是可以观察到此时这个链接的颜色是暗淡的,它不指向任何实际的存在,因此叫做虚链接。按住 cmd 点击这个虚链接,就会创建一个名为 not exist 的新笔记。与此同时,虚连接变为实链接,链接的颜色也变得更实更亮。

虚实链接之间是可以互相转换的,如果把一个实链接指向的目标资源删掉,它又会暗淡下来变为一个虚链接。

一篇笔记 A 中有个链接指向了笔记 B,那么对于笔记 A 来说,这个链接就是 outgoing link,即指向外的链接。Outgoing links 在右侧的面板里能看到,其实就是把散落在这篇笔记中的链接做一下汇总,就算不看汇总,把笔记自上到下滚动一遍,通过链接的独有颜色也能很快找到所有的链接。

一篇笔记 A 中有个链接指向了笔记 B,那么对于笔记 B 来说,这个链接就是 backlink,即指向自身的链接。右侧面板里第一个就是 backlinks,位置比 outgoing links 更靠前,足见其重要性。

无论有多少篇笔记引用了你,它们都会呈现在右侧的 backlinks 面板中,backlink 多就证明这篇笔记被引用的次数多,一般也就代表着重要度高。

Unlinked mentions

Backlinks 和 Outgoing links 面板中有上下两部分内容,上面放的都是明明白白已经建好的链接。下面有个 Unlinked mentions 区域,这里面是什么呢?举个例子,比如这篇笔记标题是「牛顿第一定律」,其他文章中有提到「牛顿第一定律」这几个字,但是并没有引用这篇文章。Unlinked mentions 帮你发现这种潜在的引用关系,并可以一键快速建立起引用。

平时在起标题的时候,也会因此而注意,不至于过分宽泛。例如笔记标题写成「定律」,那么在其他笔记中若出现「牛顿第一定律」或「大数定律」,因都有定律二字,会将「定律」作为 unlinked mentions 推荐。显然这属于干扰信息。问题的症结在于「定律」二字作为标题太宽泛,匹配过多,因此标题还是应该适当写长一些,提高辨识度。

链接内容的展现

链接在笔记中的样子,就是链接的文字呈现蓝紫色(默认主题下)并带有下划线。想看链接所指向的内容,除了跳转过去还有两种方法:

1. 小窗预览

鼠标悬停在链接上,按 cmd 键,就会出现一个浮窗,展示链接指向的内容。此时继续按住 cmd,点击链接,即可完成跳转。这可能是使用 Obsidian 最高频的动作了。

2. 就地展开

链接书写起来是这样 [[xxxx]] ,只要在前面加一个英文感叹号 ![[xxxx]],奇迹出现,链接指向的内容在原地展开了。通过这种方式可以把内容在原地展开,避免跳来跳去,阅读体验更加流畅。要注意的是,就地展开的笔记内容只能查看,无法编辑,若要编辑还需跳转至笔记内才可以。

在笔记中插入图片,能直接看到图片内容,对此我们早已习以为常,其实仔细观察图片链接,它不同于文字链接,而是前面带有感叹号,删掉这个感叹号会发生什么?看不到图片内容了,而只能看到一个链接,打开链接还是能看到图片的。可以认为,链接前面加感叹号就是要在原地展开内容,无论链接指向的是笔记还是图片。

指向子标题的链接

Markdown 语法中标题是下面这种写法:

# 一级标题
## 二级标题
### 三级标题

一个或多个井号代表一级或多级标题,井号后紧跟一个空格,后面是标题的文字内容。

文章篇幅较长时,标题就起到很好的导航作用。Obsidian 允许让链接指向标题,点击即可直接跳转到标题处,预览和就地展开也支持标题定位。写法是在链接后面紧跟一个井号 [[xxxx#title]]然后写标题,无论几级标题,引用时只写一个井号就可以。

但还有一种情况,假如你想精确引用一个二级标题,但被引用的这篇笔记中有多个二级标题是同样的文字,像这样:

# 循环
## 代码示例

# 递归
## 代码示例

假如你想引用一级标题递归下的二级标题代码示例,可以写成 xxxx#递归#代码示例,用多个井号把标题层级连成完整路径,就能做到精确定位而不必担心重名问题了。完整路径看着挺长,但其实不用一字一字的去写,通过在列表提示中选择加 tab 键补全,就可以很快的把路径写好。

除了标题定位之外,Obsidian 还支持块(block)定位。初看 block 这个概念还是很酷的,但我并不看好它。块是按照一定规则自动产生的,例如一段文字的上下都有一行空行,这段文字就被隔为一个块。对用户来说,空行没有那么明显好辨识。另外,块没有名字,当一个块被引用后,会在块的旁边自动生成一串无意义的字符来作为 block ID,这些程序生成的符号夹杂在文字中,污染了文字本身。虽然可以把 block ID 修改成有意义能看懂的文字,算是个补救措施,有些多此一举。我个人觉得,宁用标题也别用块,如果想定位到文章中的某段文字,不如就给它起个小标题,明明白白的。

链接的别名

有时候我们想建立链接,但因为行文的需要,不想一字不差地 copy 原文标题,该怎么办呢?

举个例子,假如有篇笔记题目是「牛顿第一定律」,在另一篇笔记中,我们想建一个链接引用「牛顿第一定律」这篇笔记,但想用「惯性定律」来指代它。这时就可以用别名来实现,写法是:

[[牛顿第一定律|惯性定律]]

在原有链接的后面跟一个|符号,后面写上别名,链接将只显示后面的别名部分。这样就既建立了链接,又兼顾了文字上的灵活性。

Obsidian URL

在 Obsidian 里写了一篇笔记,如果外部程序需要引用它,比如 Word 文档里或网页上的一个超链接想直接打开 Obsidian 里的这篇笔记,可以做到吗?

答案是可以。在笔记的右上角的三个点,点击它展开菜单后,有一项是 Copy Obsidian URL,点它即在剪切板里保存了一个 obsidian:// 开头的链接,将其作为超链接的地址,就能打开 Obsidian 并定位到这篇笔记了。

这个 Obsidian URL 其实是一个 URL scheme,操作系统支持通过 URL 调起指定的应用程序。妙的是还能在 URL 上添加参数,来实现更细致的行为,打开某篇笔记就是通过 URL 上这篇笔记的文件 ID 找到的。

总结

Obsidian 的在线文档中有句话,体现了链接的重要性:

Internal links are the backbone of your knowledge network.

在 Obsidian 中每个资源都是一个节点,各个节点之间通过链接编织成一张网。作为这张网的主人,我们像一只得意的蜘蛛,在自己编织的网上来去穿梭,一边使用它,一边建设它。

END