Emacs

应用

在使用了一周的 Emacs 之后发现这个诞生于 1976 年的古董软件真的很强大,之所以强大是因为它有非常多的插件,这些插件的出现也是因为它的开源和非常活跃的社区。我在使用 Emacs 的这一周里,每天都会发现新的插件和使用方法,所有遇到的问题在 Google 上都可以找到对应的答案。因为只是用了一周,也就简单说下自己的想法。

我使用 Emacs 作为主力的 GTD 工具,而非开发工具。GTD 工具主要是基于 Org Mode 是来实现的。Org Mode 是 Emacs 上的 Markup 工具,类似于 Markdown。Org Mode 也有一个自己的社区 Worg,我最初学习 Org Mode 也是看社区里的 Org-mode Tutorials,教程中第一个是一位德国的工程师 Rainer König 在 YouTube 上分享的教程。教程很详细的介绍了 Org Mode 的每一个功能,也介绍了自己的笔记结构。

Org Mode 相比较于现代化的 GTD 软件来说,它的开放性和可配置性是无可比拟的。Org Mode 使用纯文本来作为任务管理的基本工具,其文件是以 .org 结尾,语法上与 Markdown 类似。

Emacs markup

完整的 markup 可以参考这份 Emacs: Org Mode Markup Cheatsheet

Org Mode 也可以很容易的连接到外部文件,只需要加上文件路径即可,还可以指定链接的行数,如果外部文件也是 Org 文件,还可以使用 Custom ID 和 ID 来关联到特定的行数。使用插件可以很方便的每个标题自动生成 UUID,只是链接的时候需要知道 UUID 才可以。

Org Mode 我目前使用最多的是 GTD,我认为 Org Mode 最适合用子弹笔记。我曾经使用 Bear 做了一段时间子弹笔记。我非常喜欢子弹笔记的简洁性,使用纯文本的方式来管理任务。子弹笔记的好处就是它是纯文本,虽然有所谓的格式,但你可以按照自己喜欢的格式来安排笔记的解构。这些是我不打喜欢 Notion 的原因,包括后来尝试过的 Craft 笔记,因为他们都有太多的「格式」了。

子弹笔记的优势在于纯文本,但缺点也是纯文本。因为所有的任务都是平铺在一个笔记中,按照时间的维度来查看所有的任务,而在需要长时间关注的项目管理中至少需要两个视图:一个就是正常的按照日期查看任务的视图,另外一个就是按照项目来查看整体进度的视图。这在子弹笔记中是不可能的。于是在使用了一段时间之后我还是换回了 Things 来作为主要的工具。

Emacs 的 Org Mode 则完美的解决了这个问题。Emacs 本身是通过文件来管理自己的任务,每个文件都可以看作是一个项目。Org Mode 中内置了 Agenda 模式,通过配置文件中来设定 Agenda 需要扫面的文件或者文件夹,它会在打开 Agenda 模式时扫描这些目录下所有文件中的 Todo List,然后统一展示在 Agenda 视图下。通过设定 Schedule 和 Deadline 关键词可以安排任务出现在 Agenda 视图的时间点。

Todo List 和 Scheduled 的任务

Agenda 视图有几个不同的模式,我用的比较多的就是这种按照「天」的视图来查看。也可以使用「w」来切换为按周来查看。

Agenda 视图

另外一个视图是汇总展示所有的 Todo List,因为任务太多所以我从来不用这个试图。

Org Mode 可以灵活的配置自己的 Workflow,默认的流程只有 TODO -> DONE,通过快捷键 C-c C-t 可以快速在两个状态之间切换。Workflow 可以配置全局模式,同样可以在具体的文件中特别配置。我目前是使用类似于 Things 中的设置:

(setq org-todo-keywords '((sequence "TODO(t)" "WAITING(w)" "UPCOMING(u)" "SOMEDAY(s)" "PROJECT(p)" "|" "DONE(d)" "CANCELLED(c)")))

通过 | 来区分,左侧的表示任务未结束,后侧表示任务结束。在 Todo List 的上级菜单的最后加上 [/] 或者 [%] 就可以自动根据任务当前的状态来更新进度。

GTD 的另外一个就是 Inbox 的功能,所有的任务进来时都会首先放入 Inbox 中,我特别喜欢 Things 的 Inbox 功能,可以随时随地的记录刚进来的任务和想法。Org Mode 也有类似的机制,但也只能在 Emacs 中通过快捷键访问,还做不到像 Things 那样随时随地的访问。

以上是我这周用的最多的功能,Org Mode 最强大的还是社区,有太多的插件可以使用,有些人会在 Emacs 中查看邮件,或者浏览网页,Emacs 就像是一个操作系统一样,甚至 Emacs 默认还安装了几个游戏。

Emacs 内置的贪吃蛇游戏

我使用的另一个插件是 Org JIRA,可以通过 JIRA 的 JQL 来找出我需要关注的 tickets,Org JIRA 也会识别 ticket 中的 Deadline 和 Schedule,就可以在 Agenda 视图中查看每天需要处理的 tickets。

另外一个插件是 Org Roam 可以实现类似于 Roam 的反向链接管理和图形模式,不过我还不是很理解要怎么使用。

Org Roam 的反向链接

Emacs 目前有两个重要的分支,一个是 Doom Emacs,另外一个是比较流行的 Spacemacs。我个人在使用后者,在 GitHub 上可以看到很多人公开的配置,可以作为参考,上手难度相对简单。

目前我还是只是把 Emacs 作为 GTD 工具,目前感觉还不太适合作为知识管理的 Wiki 来使用。主要的问题是 Emacs 编辑器在 macOS 上的性能很糟糕,文本的滚动有明显的掉帧现象,虽不影响使用但是体验确实不好。虽然也可以直接在 iTerms2 中运行 Command Line 的 Emacs,当很多快捷键会冲突。

另外一个问题是文件之间的关联,虽然有很多种方法关联文件,但是相对于 Bear 的那种联想功能,在关联文件的体验上确实不好,不排除有类似的插件但我尚未发现。

另外一个天然的劣势就是移动端,虽然可以通过网盘或者其他方式同步笔记,但是在移动端上也只能打开源文件来做简单的处理。因为我大多数时候都是在使用 Mac,对移动端的需求不是很高,需要记录一些零星的内容或者有一些事情需要放进 INBOX 时都是通过 Telegram 的 Saved Message 来记录的。

最初发现 OrgMode 纯属偶然,人们对其的评价极高,但同时上手难度也极高,我花了两天的时间一边看教程一边实践才刚好让整个 GTD 的流程运作了起来。随后的每一天几乎都会有新的发现。社区里经常看到用了 20 多年的 Emacs 老用户来分享自己的心得,GitHub 上也可以看到很多人分享自己的配置,遇到的问题几乎都可以在 Google 上找得到答案,或许 45 年的时间就已经证明了它的强大,而它最近的一次更新是在 Aug 10, 2020,也说明了它的活力依旧。