用 org-roam 在 emacs 中构建第二个大脑

如果你觉得这个指南有帮助, 请考虑通过链接 帮助 页 支持系统工匠!

Org Roam 是什么?

Org Mode 不仅是一种很好的工具用于写作和个人笔记,还可以用于TODO列表、项目计划、时间跟踪等。一旦您真正投入使用 Org Mode,最终您将需要制定一个系统来管理 Org 文件,以便轻松存储和查找所需的信息。

Org Roam 是 Org Mode 的一个扩展,它解决了我个人使用 Org 进行个人笔记时遇到的几个最大问题:

  • 我需要多少个 Org 文件?
  • 我应该把东西放在 Org 文件中的什么位置?

Org Roam 通过使创建专注于主题的 Org 文件变得容易,并将它们链接在一起,使您可以将信息视为网络中的节点而不是层次结构文档来解决这些问题。您可以把它看作是一个个人 Wiki!

它的灵感来自一个名为 Roam 的程序和一个名为 Zettelkasten 的笔记策略,其目标是创建许多单一主题的独立笔记,并将它们链接在一起以创建一个“网络”知识库。

许多人认为这就像创建一个“第二大脑”,因为它可以轻松处理大量知识,并非常有效地提醒您主题之间的联系。

与其他类似的笔记工具相比,Org Roam 的主要优点是您可以以新的方式使用 Org Mode 的所有其他优秀功能!

Org Roam 允许您在保留 Org Mode 的所有现有功能的同时,以网络方式组织笔记和思想。这种方法可以显著提高工作效率和创造力。

先决条件

Org Roam v2 依赖于定制的 SQLite 数据库工具才能运行。Org Roam 将为您编译此代码,只要您安装了兼容的编译器!

Linux 和 macOS 用户请确保安装了 gcc 或 clang 等C/C++编译器。

Windows 用户可以按照 Org Roam 手册中的说明编译数据库程序。

您可能会疑惑为什么 Org Roam 需要数据库。数据库使 Org Roam 能够非常高效地跟踪您创建的所有“节点”及其之间的链接。您也可以使用 Org Roam 的数据库开发自己的扩展!

安装

从MELPA使用 package.el、straight.el 或您通常使用的任何其他包管理器安装 org-roam 包。

如果您使用 use-package 和 package.el,请添加此内容并执行以安装 org-roam:

(use-package org-roam
  :ensure t)

加载包后,您可以检查变量 org-roam--sqlite-available-p 的值是否为 t,以确保一切设置正确并准备好运行。

基本配置

安装 Org Roam 后,最重要的配置是设置保存 Org Roam 文件的文件夹。

默认情况下,这将是 $HOME 目录下名为 org-roam 的文件夹,但您可能会想将其设置为其他内容。无论使用什么路径,如果提前创建文件夹,事情会简单一些!

提示: 不要使用现有的 Org 文件文件夹!现有的文件不会有必要的元数据,因此不会显示在 Org Roam 的数据库中。

我们还将添加一些必要的键绑定和调用 org-roam-setup 的调用,以确保一切准备就绪。

(use-package org-roam
  :ensure t
  :custom
  (org-roam-directory "~/RoamNotes")
  :bind (("C-c n l" . org-roam-buffer-toggle)
         ("C-c n f" . org-roam-node-find)
         ("C-c n i" . org-roam-node-insert))
  :config
  (org-roam-setup))

处理迁移警告

第一次加载包时,您可能会在 *Warnings* 缓冲区中看到有关迁移 Org Roam v1 文件到 v2 的消息。

如果您以前从未使用过 Org Roam,您可以在配置中将变量 org-roam-v2-ack 设置为 t

如果您一直在使用 Org Roam v1,请按消息中的提示执行 M-x org-roam-migrate-wizard!有关详细信息,请查看 wiki 中的 迁移说明

下面是如何在配置中设置变量,以便您不再看到此消息:

(use-package org-roam
  :ensure t
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory "~/RoamNotes")
  :bind (("C-c n l" . org-roam-buffer-toggle)
       ("C-c n f" . org-roam-node-find)
       ("C-c n i" . org-roam-node-insert))
   :config
   (org-roam-setup))

创建第一个节点

让我们创建第一个节点!我们可以使用 C-c n f 绑定来调用 org-roam-node-find,它会带来一个完成会话来选择或创建一个节点。

因为我们想创建一个新节点,我们可以输入所需节点名称“Programming Languages”并按 RET (Enter)键。

为节点创建一个新的 Org 捕获缓冲区。为什么捕获缓冲区?因为 Org Roam 允许您指定多个捕获模板来创建不同种类的新笔记!我们将在另一个视频中介绍这一点。

现在,我们可以在文件中添加一些文本,然后按 C-c C-c 确认捕获以保存文件。

让我们按相同的步骤创建另一个名为“Emacs Lisp”的节点。

它们只是 .org 文件!

这些只是您笔记文件夹中的普通 .org 文件!您可以将其检入 Git 仓库或使用任何其他工具进行同步。Org Roam 创建的数据库文件 不需要 在计算机之间同步,因为 Org Roam 可以从现有的 .org 文件重新创建它。

插入到其他节点的链接

Org Roam 的真正强大之处在于开始链接节点文件!但是,这与正常的 Org 链接工作方式不同。

在 Org Roam 缓冲区中,我们可以使用 C-c n i 绑定调用 org-roam-node-insert,它会带来包含您所有节点的完成列表。选择其中一个将导致当前缓冲区中的链接指向那个节点。

让我们使用此命令在“Programming Languages”节点中插入指向“Emacs Lisp”的链接。

插入尚未存在的节点链接

您也可以键入一个尚不存在的节点名称,它将被创建!一旦使用 C-c C-c 确认出现的新节点的捕获缓冲区,指向该节点的链接将被插入到您开始的缓冲区中。

让我们使用 C-c n i 插入一个名为“Scheme”的新节点,看看这是如何工作的。

这使得构建节点图变得更加迅速!

使用自动补全插入节点链接

您还可以使用 M-x completion-at-point 在双方括号 [[]] 内完成节点名称。不过,我发现这在某些情况下不起作用!

如果您想在 Org Roam 文件中的任何位置完成节点名称而不使用括号,请将 org-roam-completion-everywhere 设置为 t 。如果您在缓冲区中键入几个字母并运行 M-x completion-at-point,完成会话将允许您完成节点名称。保存文件后,=roam:Node= 链接语法将被修复!

这里有一个更新的配置,可以更轻松地完成节点:

(use-package org-roam
  :ensure t
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory "~/RoamNotes")
  (org-roam-completion-everywhere t)
  :bind (("C-c n l" . org-roam-buffer-toggle)
         ("C-c n f" . org-roam-node-find)
         ("C-c n i" . org-roam-node-insert)
         :map org-mode-map
         ("C-M-i"    . completion-at-point))
  :config
  (org-roam-setup))

创建标题节点

Org Roam v2 的新功能之一是 能够 将节点文件中的顶级标题转换为其自己的唯一节点 。如果某些节点不真正配得上自己的文件,但您仍然想链接到它们,这可能会很有帮助!

当您的光标位于 Org Roam 节点缓冲区中的顶级标题中时,运行 M-x org-id-get-create 为标题分配 Org ID。现在,您将在 C-c n f 显示的节点列表中看到该标题的名称。

让我们在“Emacs Lisp”节点中创建一个名为“资源”的顶级标题节点!

为节点创建别名

如果您在多个文件中的顶级标题节点具有相同的名称,会发生什么情况?

让我们在“Scheme”节点中创建另一个名为“资源”的顶级标题节点,并使用 org-id-get-create 为其提供 ID。

现在,如果我们使用 C-c n f 列出所有节点,我们会在列表中看到两个“资源”节点!我们怎么才能把它们区分开来?

解决这个问题的方法是为具有相同名称的一个(或所有)节点创建别名。如果将光标置于标题节点或文件节点上,您可以运行 M-x org-roam-alias-add 。系统会提示您输入要添加的别名名称。

现在如果检查节点列表(C-c n f),您仍然会看到重复的“资源”名称,但您添加的别名也将在列表中!

如果需要,您可以为单个节点添加多个别名。

查看当前文件的反向链接

一旦您开始创建许多相互链接的节点,打开反向链接缓冲区以查看链接到您当前正在查看的节点的笔记可能会非常有帮助。

让我们打开“Emacs Lisp”节点,然后按 C-c n l 执行 org-roam-buffer-toggle 命令。一个名为 *org-roam* 的新缓冲区将在新窗口中创建。

现在,每次选择 Org Roam 节点的缓冲区时,您都会看到从任何其他节点到该节点的引用列表。由于我们正在查看“Emacs Lisp”节点,我们可以看到来自“Programming Languages”节点的引用!

让我们创建另一个名为“System Crafters”的节点,并添加指向“Programming”和“Emacs Lisp”的链接,以查看这些节点的反向链接缓冲区中的情况。

下一步是什么?

我们在此视频中已经涵盖了足够的 Org Roam 知识,让您可以以新的方式开始记笔记!构建个人知识库非常令人满意。

在后续的视频中,我们将涵盖以下主题:

  • 使用捕获模板创建 Org Roam 节点
  • 使用“每日”功能进行每日日记和记录
  • 使用 Org Roam 文件填充 Org Agenda

…以及随着 Org Roam v2 的开发而增加的更多内容!

同时,请查看 Org Roam 手册以获取有关其提供的功能的更多信息。

订阅系统工匠通讯!
与最新的系统工匠新闻和更新保持同步! 阅读 Newsletter 浏览更多信息。
名称 (optional)
邮箱