什么是双链笔记与 org-roam 初体验
什么是笔记?
笔记核心功能:
- 输入: 记录
- 输出: 信息的提取与归纳
笔记类型举例
- 课堂笔记
- 学习心得, 复习笔记
- 读书笔记
- 数学草稿
- 科研日志, 灵感
- 教程/食谱/日记等, 例如: “如何安装 Emacs”, “如何做红烧肉”
…
信息提取
从笔记高效地提取信息很难
- 纸质笔记
- 优点: 简单
- 缺点: 不能检索
- 电子笔记:
LaTeX,org,markdown等- 优点: 可全文搜索, 读取信息能力大大提高
- 缺点: 思考的过程, 知识间的联系难以体现.
传统笔记的局限性
- 自上而下的树状结构
- 树状结构无处不在: 图书馆目录, 文件夹, 书本章节段落
- 缺陷
- 输入: 初始分类难
- 输出: 不利于发现联系
- 传统笔记的完美形式就是一本书
- 但是现代人遇到问题第一反应不是去翻书, 而是用搜索引擎或 ChatGPT.
理想的笔记模型
- 双链笔记:
原子化笔记+网状结构- 原子化笔记: 将笔记拆分成独立, 完整的小条目
- 网状结构: 用
链接串连笔记, 自下而上生成结构
- 原型: 卡片盒笔记 (Zettlekasten)
- 卢曼 (Luhmann, 1927-1988): 德国社会学家
- 卢曼从 1952 年左右开始构建卡片盒笔记, 最后笔记包含 9 万余条目
- 卢曼一生发表了 50 本著作与 550 篇论文
- 现代实现方式: 双链笔记/个人知识库软件 (2020 年前后)
Roam Research,Obsidian,Logseq,Notion…- 在 Emacs 中: 基于
org-roam的知识管理系统
为什么选择 org-roam
… 而不是 Roam Research, Obsedian, Logseq, Notion, …
我个人的笔记需求
- 简洁但强大的笔记功能, 包含 LaTeX 数学公式, 交叉引用
- 支持双链笔记
- 能与文献管理软件如
Zotero整合 - 可视化界面; 易于导出为其它形式
笔记软件比较
Roam Research: 创建于 2020.1., 双链+图形界面, 订阅制 (基础版 180$/年)Obsidian: 创建于 2020.3. 基于Markdown文件, 有强大插件生态, 基础版免费, 全平台使用Logseq: 创建于 2020. 开源, 基于Markdown或org文件. 与Obsedian非常像org-mode+Emacs- 本身强大的文本处理能力与笔记生态
- 个性化设置
- 与其它工作流程的整合
- 底层结构是纯文本, 易于保存和导出
- 开源软件, 永久免费, 强大的插件生态, 上限和自由度很高
- 终生个人知识库: 平台也需要有强大的生命力, Emacs 有近 40 年历史
个人知识库的构建
- 核心: 笔记间的
链接 - 笔记类型
- 灵感笔记 (fleeting note)
- 文献笔记 (literature note)
- 永久笔记 (pernament note)
- 自下而上生成结构: 一组产生密切联系的笔记自然而然形成一个主题, 一个主题可以形成一条新的永久笔记并与其它笔记产生联系. 主题的结合可以产生新的主题, 如此反复.
- 与个人 wiki 的区别:
个人知识库不仅仅是知识的记录, 还有对知识的归纳和提炼 – 这由我们建立的
链接体现 - 参考资料
- How to take smart notes: Sönke Ahrens
- (中文版) 卡片笔记写作法.
系列视频内容
- 本期视频
- 安装与基本设置
- 今天以后大家可以用
org-roam记录学习org-roam的笔记
- 与
Zotero文献管理整合 (org-ref,helm-bibtex,org-roam-bibtex) - 与
org-noter整合 - 笔记模板设置
org笔记流程优化- 数学公式 (
org-cdlatex,org-preview) - 自动补全 (
company) - 中文输入法 (
pyim) - 交叉引用 (
org-ref) org界面优化 (org-modern,org-face…)
- 数学公式 (
- 项目管理
- 任务管理 (
org-agenda) - 日记系统 (
org-roam-daily) - 可视化 (
org-roam-ui) - 导出设置
……
org-roam 安装
以 Emacs 28 为准
gcc编译器: 用于编译emacsql-sqlite(Emacs 29 后应该不再需要)Windows下可通过msys2安装 (推荐), 并保证在系统可执行文件目录下pacman -S mingw-w64-x86_64-gccLinux或MacOS下大概率系统自带
org-roam插件- 用内置的
package-el安装: M-x package-install <return> org-roam <return> use-package模块中 :ensure t (见后面示例)
- 用内置的
org-roam-ui插件- 用内置的
package-el安装: M-x package-install <return> org-roam-ui <return> use-package模块中 :ensure t (见后面示例)
- 用内置的
emacsql-sqlite- 安装后第一次加载
org-roam, Emacs 会提示正在编译emacsql-sqlite, 请耐心等待. - 编译成功后系统中会找到类似
.emacs.d/elpa/emacsql-sqlite-XXXXX/sqlite的目录
- 安装后第一次加载
基本设置
- 笔记目录: 需要提前手动创建, 要易于同步;
- 日记设置: 目录与快捷键
- 快捷键: 使用任何一个将会启动
org-roam(use-package org-roam :ensure t ;; 自动安装 :custom (org-roam-directory "~/roam-notes/") ;; 默认笔记目录, 提前手动创建好 (org-roam-dailies-directory "daily/") ;; 默认日记目录, 上一目录的相对路径 (org-roam-db-gc-threshold most-positive-fixnum) ;; 提高性能 :bind (("C-c n f" . org-roam-node-find) ;; 如果你的中文输入法会拦截非 ctrl 开头的快捷键, 也可考虑类似如下的设置 ;; ("C-c C-n C-f" . org-roam-node-find) ("C-c n i" . org-roam-node-insert) ("C-c n c" . org-roam-capture) ("C-c n l" . org-roam-buffer-toggle) ;; 显示后链窗口 ("C-c n u" . org-roam-ui-mode)) ;; 浏览器中可视化 :bind-keymap ("C-c n d" . org-roam-dailies-map) ;; 日记菜单 :config (require 'org-roam-dailies) ;; 启用日记功能 (org-roam-db-autosync-mode)) ;; 启动时自动同步数据库 (use-package org-roam-ui :ensure t ;; 自动安装 :after org-roam :custom (org-roam-ui-sync-theme t) ;; 同步 Emacs 主题 (org-roam-ui-follow t) ;; 笔记节点跟随 (org-roam-ui-update-on-save t))
创建笔记及链接
创建链接是最基础也是最重要的功能!
org-roam-capture (快捷键 C-c n c) 创建一条新笔记. 未来可以预设不同主题的默认模板. 每一条笔记就是一个
org文件org-roam-find (快捷键 C-c n f) 通过关键词查找笔记并跳转
org-roam-insert (快捷键 C-c n i) 插入一条笔记的链接
- 在查找笔记时利用 org-roam-find 的界面
- 若笔记不存在, 则利用 org-roam-capture 的界面创建笔记
删除笔记: 直接删除笔记文件即可, 如 M-x delete-file
org-mode内链接跳转: 鼠标点击或 C-c C-o (org-open-at-point)加入标签: 普通的标签可以看作一个特殊的笔记条目, 可以用 org-roam-insert 去插入一些以关键字为标题的笔记充当标签.
一个通用惯例是在笔记头部用
org的列表格式罗列标签, 如 - tag :: <tag-1>, <tag-2>, <tag-3>
以后我们也可以把这一行加入笔记模板
优化 minibuffer 补全界面
vertico + orderless
(use-package vertico ;; 补全界面优化
:ensure t
:config
(vertico-mode))
(use-package orderless ;; 无序搜索
:ensure t
:custom
(completion-styles '(orderless basic))
(completion-category-defaults nil)
(completion-category-overrides '((file (styles partial-completion)))))同步
org-roam的笔记文件是纯文本文件, 用任意网盘同步即可- 不同机器上要设置好
org-roam-directory变量 (或者直接放在网盘目录下) - 也可以用
git同步: 可控制文件类型, 版本控制
- 不同机器上要设置好
- 一般不需要同步数据库文件
org-roam.db.- 此数据库文件保存了链接信息, 一般保存在
./emacs.d/目录下 - 当笔记条目很多的时候, 这个文件会很大
- 在不同的机器上可以根据
org文件自动生成的 ((org-roam-db-autosync-mode))
- 此数据库文件保存了链接信息, 一般保存在
- 数据库更新
- 自动更新: 通过 (org-roam-db-autosync-mode) 实现
- 手动更新
- 执行 M-x org-roam-db-sync
Windows下执行这一命令可能会出现Error ....... Selecting deleted buffer的错误信息. 只要emacs-sqlite已经正常安装, 无视这条错误信息并再次执行 org-roam-db-sync 即可.