¶介绍
构建个人知识体系时,您可以做的最重要的事情之一是创建一个高效的工作流程来捕获新信息。
在视频结束时,您将知道如何为在 Org Roam 文件中捕获笔记和项目详细信息创建自定义模板。
¶需要一个良好的捕获工作流程
在前面的视频中,我概述了使用名为 Org Roam 的软件包在 Org Mode 中构建个人知识库。
当您开始使用 Org Roam 存储笔记和信息时,确定您通常填写的常见详细信息以及创建模板来简化该过程会很有帮助。
例如,如果您经常捕获有关书籍或研究论文的详细信息,在创建新笔记时,您可能需要包含几种不同类型的信息:
- 内容摘要
- 书目信息
- 您可能想要使用的引语
- 到主题笔记的链接,在那里您可以扩展获得的想法
Org Roam 提供了一种定义您捕获的信息模板的方法,以便您永远不会忘记需要在新笔记中包含的有用事情。
¶Org Roam 笔记模板的工作原理
Org Roam 包含它自己的 Org Mode 捕获模板专业化版本。如果您以前从未使用过捕获模板,别担心,创建和使用 Org Roam 模板非常简单。
要理解 Org Roam 模板的东西是,它们在创建新笔记时使用。在上一个视频中,我向您展示了如何使用 org-roam-node-find
命令创建新笔记,我们将其绑定到 C-c n f
。
默认情况下,当您使用此命令创建新笔记时,Org Roam 会自动创建一个只包含标题和一些元数据的 .org
文件,里面别无其他。
但是在您定义自己的自定义笔记模板之后,在创建新笔记时,系统会提示您选择要使用的模板。这就是您可以决定要创建何种类型的笔记以及其最初包含的内容的方式!
¶理解默认模板
要理解 Org Roam 模板,让我们首先查看默认捕获模板。我们将通过在上一个视频中构建的 Org Roam 配置中设置 org-roam-capture-templates
变量来实现这一目的。
此变量存储在创建新笔记时使用的捕获模板列表。如果设置此变量,您必须复制默认模板,否则它将不再可用。有关格式的更多详细信息,请阅读其文档!
默认模板如下所示:
'(("d" "default" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed t))
它包含以下内容:
"d"
:模板的“键”,按字母选择模板"default"
:模板的完整名称plain
:插入的文本类型,对于笔记模板始终为此值"%?"
:这是将插入新笔记的文本,可以是任何内容!:if-new
: 以下列表描述了如何创建笔记文件:unnarrowed t
: 捕获时确保显示完整文件(Org 的内容)
除模板键和名称外,您可能感兴趣更改的两个事项是初始笔记文本和创建的文件名格式,尽管我不建议更改文件名格式!
初始笔记文本具有自己的特殊格式,可以在 Org Mode 文档中阅读:
¶完整的初始配置
(use-package org-roam :ensure t :init (setq org-roam-v2-ack t) :custom (org-roam-directory "~/RoamNotes") (org-roam-completion-everywhere t) (org-roam-capture-templates '(("d" "default" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed 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 视频中的笔记,并添加一个用于捕获有关编程语言详细信息的模板。
("l" "programming language" plain "* Characteristics\n\n- Family: %?\n- Inspired by: \n\n* Reference:\n\n" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed t)
现在让我们尝试为“JavaScript”创建新节点并选择我们的新模板。
出现的捕获窗口填充了我们输入到字符串中的格式!我们可以键入所有详细信息并使用 C-c C-c
保存笔记。
¶创建文献引用模板
我们可以通过使用 Org Mode 的模板扩展语法来为数据输入添加更多结构。
我们在本视频中讨论的第一个模板示例是一个用于捕获您读取的文献材料(如书籍)详细信息的模板。
让我们创建一个模板来捕获我们前面提到的一些内容。这次,我们将添加自定义提醒以填写某些我们想要填写的详细信息,比如作者和书籍出版年份。
("b" "book notes" plain "\n* Source\n\nAuthor: %^{Author}\nTitle: ${title}\nYear: %^{Year}\n\n* Summary\n\n%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed t)
让我们使用此模板为“Dune”创建新笔记。我们将被要求提供作者和年份,这些信息将与我们已经键入的笔记标题一起插入捕获缓冲区!然后光标将跳转到摘要部分,以便我们可以键入有关这本书的笔记。
模板扩展提示还有其他有趣的用途,所以请务必访问 Org Mode 手册以查看您可能还能使用的其他内容。 Org Mode Manual: Template Expansion
¶创建项目模板
您可能想要创建的另一个有用模板是用于捕获您开始的新项目的详细信息,特别是任务、目标和您可能需要记住的任何重要日期。
这里是一个用于设置新项目文件的模板:
("p" "project" plain "* Goals\n\n%?\n\n* Tasks\n\n** TODO Add initial tasks\n\n* Dates\n\n" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: Project") :unnarrowed t)
我们这次新增的内容是 file+head
部分中的 #+filetags: Project
配置。该部分定义了插入新文件标题行的信息。
我们在这里做的就是将 Project
标签添加到文件中。标记您的笔记文件会在您开始使用 Org Roam DB API 查询笔记时获得一些额外的好处。如果您使用 Vertico 和 Marginalia 该标签也可能出现在您的完成列表中,如果您还没有看到我的 Vertico 视频 [检查我的 Vertico 视频。
我将在稍后视频中向您展示的示例是如何使用此标签查找所有项目笔记,并从这组文件自动生成 Org Agenda 列表!
¶将模板存储在 Org 文件中
让我们讨论如何在真实的 Org 文件中编写捕获模板,这样您就不必在 Emacs 配置内编辑字符串。
实际上这样做非常简单!只需创建一个包含我们之前创建的模板字符串内容的新 .org
文件,然后清理它,使其看起来像正常文件。
保存模板文件后,您需要用包含模板文件路径的 file
子列表替换捕获模板中的字符串。
以下是我们需要如何更改书籍笔记模板以引用模板文件而不是字符串:
("b" "book notes" plain (file "~/RoamNotes/Templates/BookNoteTemplate.org") :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed t)
¶自定义默认模板
您也可以自定义默认模板!
让我们尝试插入创建笔记的日期。我们可以通过向 file+head
配置中的初始标题字符串添加 #+date: %U
来实现这一点:
("d" "default" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+date: %U\n") :unnarrowed t)
如我之前提到的,如果您真的想要,可以更改 Org Roam 创建的文件的命名,只需将 file+head
中的第一个字符串更改为包含您想要的格式,其中 ${slug}
是反映初始笔记标题的文件名的一部分。
请记住,如果您希望文件名和标题内容一致,需要在所有模板中复制 :if-new
设置!
¶下面是什么?
Org Roam 提供了另一个用于捕获一天中出现的思想和想法的有用功能,称为“dailies”。在下一视频中,我将向您展示如何使用此功能保存日志、每日工作日志以及您想要记住的任何随机内容!