Emacs学习笔记(11):用Org-mode实现GTD
用Org-mode实现GTD
有了Org-mode强大的任务管理功能,再配合其他一些Emacs插件,可以很容易实现个人时间管理(GTD)。 如果不了解GTD,这里 可以让你在两分钟之内对GTD有一个初步的认识。
Table of Contents
1 如何进行GTD
如GTD精要 中所述,GTD包括收集、整理、组织、回顾、执行等环节。各个环节都需要工具的支持:
1.1 收集
任何需要关注的事件,如mail, 电话,IM,口头交流,网页,文档,想法等,都有可能产生新的任务。收集环节要把这些需要关注的事件都记录下来。
所以需要一个收集箱(Inbox),能够随时快速启用,记录需要的信息 。
1.2 整理
在合适的时间梳理收件箱中的信息,抛弃掉没用的垃圾和暂时不用考虑的参考信息,剩下的就是需要关注的任务。整理阶段的三种处理方式是:
- 既不需要处理又无保留价值的信息,直接舍弃
- 不需要处理但有保留价值的信息,归档留存
比如,一篇有用的资料,以后可能会用到,需要归档已被查阅;一个很好的想法但由于时间、前提条件、考虑程度等因素不能马上投入行动,需要记录下来等等。
- 需要处理的信息,创建一个任务
根据以上三种情况,整理阶段需要实现 :
- 删除无用的信息
- 将信息归档
- 创建任务
1.3 组织
创建任务时,要有一个快速的判断,包括what(做什么),who(谁来做),when(什么时候做),where(什么地点处理),why(为什么要做,可以用原始消息作为原因),how(如何做),how much(需要多长时间)。 这个判断要非常迅速,并根据判断的结果对任务进行组织,以便后来的处理和查询,通常按照可以这样的步骤分析:
- 该任务是否属于一个项目?如果是,首先打上项目标记
- 该任务能否在2分钟完成?如果是,马上处理,然后将任务标记为“已完成”
- 根据重要性和紧迫性,为该任务划分优先级
- 该任务是否需要别人处理?如果是,通知对方,然后将任务标记为“等待中”
- 需要自己处理的任务,马上判断处理的地点/场合,并标记
- 对于能够确定时间的任务(日程安排),标记计划处理时间,如果有截止日期,也标记上
根据上述步骤,组织阶段需要的功能包括 :
- 将任务归入不同的工作清单
- 为任务增加标记
- 定义任务的完成状态
- 为任务定义优先级
- 为任务设定时间点
1.4 回顾
在合适的时机检查所有的任务,根据实际情况进行处理。建议的做法包括:
- 每日回顾 每天早上首先查看当日的日程表,然后检查待办任务清单,根据实际情况和当日的时间安排,以及当日的行程(地点),决定一天的工作计划。
- 周期性回顾 可以是每周,每月或更长的时间周期。回顾一段时间内所完成的事情,做出总结;同时根据实际情况的变化,调整下一阶段的计划。
- 项目回顾 项目是一系列任务的组合,并且任务之间存在依赖关系。根据项目的时间点,在适当的时机回顾整个项目的相关任务, 进行总结或计划。
可以遵循”六个高度检视法“:
- 5万英尺+:人生目的和价值观(面临重大变化和转折时)
- 4万英尺:3~5年的展望(建议每年检视)
- 3万英尺:1~2年的目标(建议每季检视)
- 2万英尺:责任范围(建议每月检视)
- 1万英尺:当前的项目(建议每周检视)
- 跑道:下一步行动(建议每日检视)
前3个较低层次的内容大多是针对事物当前状态(行动、项目、职责), 再向上的层次则主要涉及指导方向、目标取向等方面,需要在恰当的时机去关注需要关注的方面,长远规划,掌控愿景,保持全方位的平衡。
回顾阶段需要 :
- 按时间段检索任务
- 按项目检索任务
- 处理任务间的依赖关系
1.5 执行
根据 情境是否合适 、 时间是否够用 、 精力是否充沛 、 任务是否重要 四个原则来决定要进行哪项任务。 因为经过前面的步骤已经周密严谨系统地考量过各项任务,所以此时只需要用直觉判断即可。可以参考”四象限法则“:
- 给出任务的定性: 重要/不重要, 紧急/不紧急
- 按照”先轻重,再缓急“的原则,将任务按照”重要且紧急-重要不紧急-不重要但紧急-不重要不紧急“的顺序排序
- 对于划分到同一类型的任务,人为区分”高、中、低“的优先级
- 处理原则:
- 重要且紧急:尽早动手,缓解压力
- 重要不紧急:尽早计划,逐步完成
- 不重要但紧急:寻求帮助,设定截止时间
- 不重要不紧急: 冷却处理
每完成一项任务,就将该任务标记为“已完成”,并归档。
为了帮助判断,需要支持任务的筛选、搜索和排序 。
2 用Org-mode实现GTD
前面已经列出了GTD工具应该具备的功能,用Org-mode可以很好地实现这些功能,从而将Org-mode当做GTD工具。
2.1 文件的划分
Org-mode管理的基本单位是文件,尽管可以将所有的任务放到同一个文件中,但这样不利于管理,所以要首先规划文件的划分。
我根据自己的需要,设计了6个文件:
- inbox 收件箱,用于收集未整理的信息
- task 待办事项,记录所有未完成的事项。但不包括项目内容。
- Tasks 任务
- 没有时间点的事项为“待办事项”
- 有时间点的待办事项为“日程安排”
- 有时间间隔的待办事项为“周期性任务”
- Ideas 想法
- Tasks 任务
- finished 完成的任务会迁移到这里
- Tasks 完成的任务
- Journal 日志,按照时间范围组织结构,可以将完成的任务转移到这里
- note 笔记,临时存储一些以后可能会用到的资料。note会逐步转移到真正的笔记本中
- trash, 回收站,取消的任务,不需要的信息和资料等迁移到这里,等待删除,按类型区分
- Tasks
- Ideas
- Notes
- project,项目,专门收集非单独的,项目相关的事项。完成的项目实现不会迁移到finished中,项目日志和总结等都在这个文件中完成
- 每个项目一条,以项目名称/简称作为标签
- 统一的标签:Proj
2.2 任务状态
状态(快捷键) | 完成状态 | 说明 | 回顾周期 |
---|---|---|---|
无状态标示尚未开始整理,一般位于Inbox | |||
TODO(t) | 最基本的任务状态,现在要做,但还没计划做的时间 | ||
NEXT(n) | 下一步行动,还未开始计划 | ||
SOMEDAY(s) | 想法,还没决定是否开始行动 | ||
Done(d) | 是 | 已经完成,需要记录完成时间和备注说明,转移到finished.org | |
Abort(a) | 是 | 取消的任务,需要说明取消原因,转移到trash.org的相应节点中 | |
WAITTING(w) | 等待其他人完成 |
任务状态在多个文件中都会使用,所以要在.emacs中定义(而不是单个.org文件中)
(setq org-todo-keywords '((sequence "TODO(t!)" "NEXT(n)" "WAITTING(w)" "SOMEDAY(s)" "|" "DONE(d@/!)" "ABORT(a@/!)") ))
2.3 标签设计
标签包括几组:
- 情境标签,表明该任务应该在何种环境下完成
- @Office 办公室
- @Home 在家
- @Computer 有计算机的时候
- @Call 打电话
- @Way 在路上或外出
- @Lunchtime 午休时间
- 分类标签
- 所有的项目具有标签”project“
- 其他的分类自行定义
2.4 TODO 属性设计
2.5 初始化文件
为了使上面的设计能够生效,对于有些文件需要进行初始化,增加配置信息。还可以包含一些例子。
- task.org
- finished.org
- project.org
2.6 定义转接(Refiling)
使用文件管理GTD,一定会需要将标题从一个节点移动到另一个节点。
org-mode 提供的 C-c C-w 可以方便地在同一文件内移动节点。
对于不同文件之间的移动,也可以通过 配置来实现快速移动,下面是一个例子:
'(org-refile-targets (quote (("newgtd.org" :maxlevel . 1) ("someday.org" :level . 2))))
通过这样的设定,可以表示出「someday.org」文件中第二阶层的标题和「newgtd.org」文件中第一阶层的标题。
TODO
3 使用场景
3.1 快速收集信息
GTD工具通常会定义一个Inbox,用于快速记录想法、任务。万能的Inbox工具是纸和笔,之前我也尝试过gmail、EverNote和doit.im, 但都感觉不够敏捷。 而Emacs 下的org-mode + remember-mode 能够满足我的要求。
最新版的Org(>6.36)集成了remember.el,可以快速捕获信息,通过预定义的模板进行分类,并能够保存相关的附件。
尽量使用Emacs完成更多的功能有利于收集(如www,mail,im,read)
3.1.1 快速启动
在emacs中使用命令 M-x org-remember, 会打开一个新的buffer,输入一些内容之后输入命令C-c C-c,就会将内容保存到文件中(默认是~/.notes)。 如果查看~/.notes文件,会看到类似下面的内容:
** Mon Apr 16 10:32:38 2012 (使用org-remember创建) 使用org-remember创建 /home/********/orgmode3_GTD.org ** Mon Apr 16 10:34:41 2012 (另一个测试) 另一个测试 /home/*******/tmp
org-remember会自动创建一些条目,包括时间,输入的注释内容以及当时Emacs打开的文件名。
尽管这样已经比手工打开一个文件并输入一些内容要迅速许多,但我们还可以做到更快:
- 可以定义org-remember命令的快捷键,比如C-c c(这个快捷键应该是org菜单中最快捷的):
(define-key global-map "\C-cc" 'org-remember)
- 如果不习惯一直开着Emacs并且觉得Emacs打开太慢,还可以使用Emacs的Server/Client模式。 $ emacsclient -e "(remember-other-frame)"
3.1.2 模板定义
org-remember支持模板,可以通过快捷键选择事件的类型,生成特定格式的记录,并插入到指定容器的指定位置。其格式是: (名称,快捷键,内容模板,文件,父节点)
我的事件定义如下:
事件(快捷键) | 容器 | 模板 |
---|---|---|
New(n) | inbox.org | 收件箱,收集未整理的信息 |
Task(t) | task.org | 待办事项,所有未完成的事情 |
Calendar(c) | task.org | 日程安排,具有明确时间的待办实现,可以是周期性任务 |
Idea(i) | task.org | 想法,愿望 |
Note(r) | note.org | 笔记,最终会被移到真正的笔记本 |
Project(p) | project.org | 项目任务 |
对应的模板配置:
(org-remember-insinuate) (setq org-directory "~/Documents/Dropbox/0.GTD/") (setq org-remember-templates '(("New" ?n "* %? %t \n %i\n %a" "~/Documents/Dropbox/0.GTD/inbox.org" ) ("Task" ?t "** TODO %?\n %i\n %a" "~/Documents/Dropbox/0.GTD/task.org" "Tasks") ("Calendar" ?c "** TODO %?\n %i\n %a" "~/Documents/Dropbox/0.GTD/task.org" "Tasks") ("Idea" ?i "** %?\n %i\n %a" "~/Documents/Dropbox/0.GTD/task.org" "Ideas") ("Note" ?r "* %?\n %i\n %a" "~/Documents/Dropbox/0.GTD/note.org" ) ("Project" ?p "** %?\n %i\n %a" "~/Documents/Dropbox/0.GTD/project.org" %g) )) (setq org-default-notes-file (concat org-directory "/inbox.org"))
使用模板参数能带来很多便捷。比如上面的Project模板,在收集的时候能够根据选择的项目名称,自动将任务插入到对应项目的条目下面。
常用的模板元素:
元素 | 说明 |
---|---|
%? | 输入文字 |
\n | 插入换行符 |
%i | 插入选择区域 |
%a | 当前光标所在标题的链接 |
%t | 插入日期 |
%T | 插入日期和时间 |
%g | 从目标容器的标签中选择 |
%G | 从全局标签中选择 |
%t | 输入日期时间 |
模板的详细说明可以参考这里。
3.2 TODO 查看日程表
在 Emacs 配置文件 .emacs 定义日程表快捷键:
(define-key global-map "\C-ca" 'org-agenda)
C-c [ 将当前文件加入日程表,C-c a a 本周事件 t 显示所有事件 m 查询标签 L 当前缓冲区时间线 s 查询关键词 T 查询带 TODO 关键词的项 M 查询带 TODO 关键词的标签 q 退出日程表
可以将多个 org 文件从日程表加入、移除,或者将日程表锁定在当前 org 文件的某个分支: C-c [ 将当前文件加入日程表。如果已加入,移动到前面 C-c ] 将当前文件从日程表中移除 C-c C-x < 锁定到当前树(只显示当前树的事件) C-c C-x > 解除锁定
3.3 TODO 每日计划
- State "TODO" from ""
3.4 TODO 按状态查询
- State "TODO" from ""
3.5 TODO 按标签搜索
- State "TODO" from ""
3.6 TODO 工作记录
- State "TODO" from ""
3.7 TODO 阶段总结
- State "TODO" from ""
3.8 TODO 项目统计
- State "TODO" from ""
C-c C-x C-r (clocktable)
统计每类任务划分的时间
3.9 TODO 文档任务
- State "TODO" from ""
C-c [ 将当前文件加入日程表
3.10 TODO 导出和打印
- State "TODO" from ""
4 扩展
4.1 同步
由于前面已经将GTD文件目录设置在Dropbox目录下,所以可以自动实现同步,包括pc,mac,mobile。
iOS和Android上面都有MobileOrg,移动设备上的GTD也就解决了。
4.2 TODO 导出可打印版本
- State "TODO" from ""