Emacs学习笔记(11):用Org-mode实现GTD

用Org-mode实现GTD

有了Org-mode强大的任务管理功能,再配合其他一些Emacs插件,可以很容易实现个人时间管理(GTD)。 如果不了解GTD,这里 可以让你在两分钟之内对GTD有一个初步的认识。

1 如何进行GTD

GTD精要 中所述,GTD包括收集、整理、组织、回顾、执行等环节。各个环节都需要工具的支持:

1.1 收集

任何需要关注的事件,如mail, 电话,IM,口头交流,网页,文档,想法等,都有可能产生新的任务。收集环节要把这些需要关注的事件都记录下来。

所以需要一个收集箱(Inbox),能够随时快速启用,记录需要的信息 。

1.2 整理

在合适的时间梳理收件箱中的信息,抛弃掉没用的垃圾和暂时不用考虑的参考信息,剩下的就是需要关注的任务。整理阶段的三种处理方式是:

  • 既不需要处理又无保留价值的信息,直接舍弃
  • 不需要处理但有保留价值的信息,归档留存

    比如,一篇有用的资料,以后可能会用到,需要归档已被查阅;一个很好的想法但由于时间、前提条件、考虑程度等因素不能马上投入行动,需要记录下来等等。

  • 需要处理的信息,创建一个任务

根据以上三种情况,整理阶段需要实现 :

  • 删除无用的信息
  • 将信息归档
  • 创建任务

1.3 组织

创建任务时,要有一个快速的判断,包括what(做什么),who(谁来做),when(什么时候做),where(什么地点处理),why(为什么要做,可以用原始消息作为原因),how(如何做),how much(需要多长时间)。 这个判断要非常迅速,并根据判断的结果对任务进行组织,以便后来的处理和查询,通常按照可以这样的步骤分析:

  1. 该任务是否属于一个项目?如果是,首先打上项目标记
  2. 该任务能否在2分钟完成?如果是,马上处理,然后将任务标记为“已完成”
  3. 根据重要性和紧迫性,为该任务划分优先级
  4. 该任务是否需要别人处理?如果是,通知对方,然后将任务标记为“等待中”
  5. 需要自己处理的任务,马上判断处理的地点/场合,并标记
  6. 对于能够确定时间的任务(日程安排),标记计划处理时间,如果有截止日期,也标记上

根据上述步骤,组织阶段需要的功能包括 :

  • 将任务归入不同的工作清单
  • 为任务增加标记
  • 定义任务的完成状态
  • 为任务定义优先级
  • 为任务设定时间点

1.4 回顾

在合适的时机检查所有的任务,根据实际情况进行处理。建议的做法包括:

  • 每日回顾 每天早上首先查看当日的日程表,然后检查待办任务清单,根据实际情况和当日的时间安排,以及当日的行程(地点),决定一天的工作计划。
  • 周期性回顾 可以是每周,每月或更长的时间周期。回顾一段时间内所完成的事情,做出总结;同时根据实际情况的变化,调整下一阶段的计划。
  • 项目回顾 项目是一系列任务的组合,并且任务之间存在依赖关系。根据项目的时间点,在适当的时机回顾整个项目的相关任务, 进行总结或计划。

    可以遵循”六个高度检视法“:

  • 5万英尺+:人生目的和价值观(面临重大变化和转折时)
  • 4万英尺:3~5年的展望(建议每年检视)
  • 3万英尺:1~2年的目标(建议每季检视)
  • 2万英尺:责任范围(建议每月检视)
  • 1万英尺:当前的项目(建议每周检视)
  • 跑道:下一步行动(建议每日检视)

前3个较低层次的内容大多是针对事物当前状态(行动、项目、职责), 再向上的层次则主要涉及指导方向、目标取向等方面,需要在恰当的时机去关注需要关注的方面,长远规划,掌控愿景,保持全方位的平衡。

回顾阶段需要 :

  • 按时间段检索任务
  • 按项目检索任务
  • 处理任务间的依赖关系

1.5 执行

根据 情境是否合适 、 时间是否够用 、 精力是否充沛 、 任务是否重要 四个原则来决定要进行哪项任务。 因为经过前面的步骤已经周密严谨系统地考量过各项任务,所以此时只需要用直觉判断即可。可以参考”四象限法则“:

  1. 给出任务的定性: 重要/不重要, 紧急/不紧急
  2. 按照”先轻重,再缓急“的原则,将任务按照”重要且紧急-重要不紧急-不重要但紧急-不重要不紧急“的顺序排序
  3. 对于划分到同一类型的任务,人为区分”高、中、低“的优先级
  4. 处理原则:
    • 重要且紧急:尽早动手,缓解压力
    • 重要不紧急:尽早计划,逐步完成
    • 不重要但紧急:寻求帮助,设定截止时间
    • 不重要不紧急: 冷却处理

每完成一项任务,就将该任务标记为“已完成”,并归档。

为了帮助判断,需要支持任务的筛选、搜索和排序 。

2 用Org-mode实现GTD

前面已经列出了GTD工具应该具备的功能,用Org-mode可以很好地实现这些功能,从而将Org-mode当做GTD工具。

2.1 文件的划分

Org-mode管理的基本单位是文件,尽管可以将所有的任务放到同一个文件中,但这样不利于管理,所以要首先规划文件的划分。

我根据自己的需要,设计了6个文件:

  • inbox 收件箱,用于收集未整理的信息
  • task 待办事项,记录所有未完成的事项。但不包括项目内容。
    • Tasks 任务
      • 没有时间点的事项为“待办事项”
      • 有时间点的待办事项为“日程安排”
      • 有时间间隔的待办事项为“周期性任务”
    • Ideas 想法
  • 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 标签设计

标签包括几组:

  1. 情境标签,表明该任务应该在何种环境下完成
    • @Office 办公室
    • @Home 在家
    • @Computer 有计算机的时候
    • @Call 打电话
    • @Way 在路上或外出
    • @Lunchtime 午休时间
  2. 分类标签
    • 所有的项目具有标签”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 "" 2012-04-17 Tue 23:17

3.4 TODO 按状态查询

  • State "TODO" from "" 2012-04-17 Tue 23:17

3.5 TODO 按标签搜索

  • State "TODO" from "" 2012-04-17 Tue 23:17

3.6 TODO 工作记录

  • State "TODO" from "" 2012-04-17 Tue 23:17

3.7 TODO 阶段总结

  • State "TODO" from "" 2012-04-17 Tue 23:17

3.8 TODO 项目统计

  • State "TODO" from "" 2012-04-17 Tue 23:17 统计每类任务划分的时间

    C-c C-x C-r (clocktable)

3.9 TODO 文档任务

  • State "TODO" from "" 2012-04-17 Tue 23:17

C-c [ 将当前文件加入日程表

3.10 TODO 导出和打印

  • State "TODO" from "" 2012-04-17 Tue 23:17

4 扩展

 

4.1 同步

由于前面已经将GTD文件目录设置在Dropbox目录下,所以可以自动实现同步,包括pc,mac,mobile。

iOS和Android上面都有MobileOrg,移动设备上的GTD也就解决了。

4.2 TODO 导出可打印版本

  • State "TODO" from "" 2012-04-17 Tue 23:18

Date: 2012-04-17 23:25:34 CST

Author: Holbrook

Org version 7.8.08 with Emacs version 23

Validate XHTML 1.0
posted @ 2012-04-17 23:30 心内求法 阅读(...) 评论(...) 编辑 收藏