`
foo
  • 浏览: 27418 次
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Emacs学习笔记(10):Org-mode,最强的任务管理利器,没有之一

阅读更多

Org-mode,最强的任务管理利器,没有之一

程序员对于“TODO”这个词一定不陌生。一个TODO意味着有一件事情需要去做。更深入一步来说,TODO是一个未完成的任务。

Org-mode能够完美解决任务管理的各种问题,包括任务/子任务的划分,关键时间的设定,任务状态变化的跟踪,以及任务的检索和查询。 再配合Org-mode的强大编辑功能, 能够实现很多功能,比如时间管理(GTD),项目计划和管理,工作日志等。

本文介绍Org-mode强大的任务管理功能。

1 定义任务和子任务

Org-mode认为,每一个任务通常会需要附带一些文字说明。所以Org-mode将标题作为任务的载体。通过在标题上增加状态标记,来定义任务。 由于大纲是分级的,所以将标题定义为任务天然支持了子任务:可以在子标题上标记子任务。

使用C-c C-t或者S-LEFT/RIGTH 可以为标题增加或改变任务标记。

2 定义任务状态

Org-mode内置的任务状态只有两种:TODO和DONE。如果需要更多的状态,需要自己定义。

可以在文件内部定义任务状态: 关键字应该各不相同,这样对于一个选项 Org 才知道该用哪个状态序列(集合)。例子中也给出了快速使用一个关键字的方法,就是在关键字后面括号中给出快捷字母——当用 C-c C-t时,会询问,让你输入一个字母。

要自定义任务状态,可以使用文档元数据“#+SEQTODO:”,可以在文档的任何地方定义,但是建议统一定义在文档头部:

#+SEQ_TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f)
#+SEQ_TODO: TODO(T!) | DONE(D@)3  CANCELED(C@/!)    

将光标放在这些内容上,输入 C-c C-c 可以直接生效。此时再用C-c C-t设定任务时,会打开一个新的缓冲区:

 

对照前面的定义不难发现:

  • 可以定义多组状态序列,每个“#+SEQTODO”行定义一组
  • 状态之间用空格分隔
  • 可以在()中定义附加选项,包括:
    • 字符:该状态的快捷键
    • !:切换到该状态时会自动增加时间戳
    • @ :切换到该状态时要求输入文字说明
    • 如果同时设定@和!,使用“@/!”
  • 用“|”分隔未完成状态和已完成状态。未完成状态在查询待办事项时会列出。

使用C-c C-t 或者 S-LEFT/RIGTH 切换一些状态后,任务会变成这个样子:

会自动生成时间戳,提示填写说明。从而留下完整的记录。

上面的任务状态设置只适用于当前文档。如果希望设定所有.org文档的默认任务状态,需要在.emacs配置文件中定义。 上面的任务状态在配置文件中的等效设置为:

(setq org-todo-keywords
    '((sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
      (sequence "TODO(T!)" "|" "DONE(D@)3" "CANCELED(C@/!)")
     ))    

除了状态序列外,还可以定义type,来标记任务的分类。可以参考这里 。

3 设置任务优先级

在Org-mode中,还针对任务设定了A,B,C三种优先级,在安排日程的时候可以按照优先级进行排序。为任务设定优先级是通过 快捷键 S-UP/DOWN

4 跟踪子任务完成情况

对于有多个子任务的上级任务,很常见的一个需求是随时跟踪子任务的完成情况。 Org-mode支持在上级任务上增加标记,当子任务的状态发生改变时自动更新上级任务的完成情况。 支持百分比和分数两种形式,类似[66%] 或者 [2/3]。

可以在上级任务标题中的任意位置插入[%] 或者 [/], 当子任务的状态发生变化时,会自动更新该位置的值。 比如:

* Organize Party [%]
** Call people [/]
*** Peter
*** Sarah
** Buy food
** Talk to neighbor

注意:

  1. 当改变子任务状态时,只更新上一级任务的完成情况,不可级联。
  2. 即使所有的子任务都完成,也只是标记上一级任务的完成情况为100%,而不能自动更新上级任务的完成状态。如果需要自动设定为完成,可以在.emacs中增加如下配置:
    (defun org-summary-todo (n-done n-not-done)
      "Switch entry to DONE when all subentries are done, to TODO otherwise."
      (let (org-log-done org-log-states)   ; turn off logging
        (org-todo (if (= n-not-done 0) "DONE" "TODO"))))
    
    (add-hook 'org-after-todo-statistics-hook 'org-summary-todo)

5 用复选框标记非标题类型的子任务

前面的任务和子任务都是标题形式。Org-mode还支持非标题形式的子任务。对于以”[ ]“开头的列表, 会被当作复选框。这样就形成了局部的子任务, 适用于将一个任务划分成几个简单的步骤。 下面是一个例子:

*** 一个任务 [0/2]
该任务包含几个步骤:
- [-] 步骤1 [1/2]
  - [X] 步骤1.1
  - [ ] 步骤1.2
- [-] 步骤2 [1/2]
  - [X] 步骤2.1
  - [ ] 步骤2.2

与子任务类似,步骤的状态变化会改变上级步骤/任务的完成情况。 下面是复选框相关的命令:

 KEYSCOMMENT
C-c C-c 改变复选框状态
M-S-RET 增加一个子项

6 查询任务

Org-mode的编辑功能 中介绍过大纲的检索功能:

前面 C-c /            只列出包含搜索结果的大纲,并高亮,支持多种搜索方式

该功能可以按照多种方式检索,其中针对任务有两种方式: todo 和 TODO key words。 分别实现高亮所有TODO和具有特定关键字的TODO

7 任务的时间计划

Org-mode中的任务还可以设置计划时间(SCHEDULED)和截止时间(DEADLINE),方便任务的管理和排程。

7.1 时间戳

在Org-mode中,将带有日期和时间信息的特定格式的字符串称为时间戳。时间戳使用”< >“进行标记,比如:

<2005-10-01 Tue>
<2003-09-16 Tue 09:39>
<2003-09-16 Tue 12:00-12:30>

时间戳分为两种,上面的例子中的时间戳都标记了一个”时间点“,另外一种时间戳标记重复出现的多个时间点。 使用时间点+ 间隔( 天(d)、周(w)、月(m)或者年(y))来表示。比如:

 <2007-05-16 Wed 12:30 +1w>

表示从2007-05-16 12:30开始,每周重复一次。

时间戳可以放在标题或正文的任何部分。

输入时间戳时,可以手工输入符合格式的标记,也可以使用快捷键 C-c . 来创建。

如果要快速输入日期无需选择,可以直接用C-c <。

C-c > 可以查看日历。

如果仅仅想输入一个日期/时间,与任务没有任何关系,可以用C-c !。

S-left|S-right 以天为单位调整时间戳时间 S-up|S-down 调整光标所在时间单位;如果光标在时间戳之外,调整时间戳类型(是否在日程表中显示) S-LEFT/ 将光标处理的时间戳改变一天。 RIGHT ─────────────────────────────────────────────────────────────────────────── S-UP/ 改变时间戳中光标下的项。光标可以处在年、月、日、时或者分之上。当时间戳包含一个时间段时,如 “15:30-16:30”,修改第一个时间,会自动同时修改第 DOWN 二个时间,以保持时间段长度不变。想修改时间段长度,可以修改第二个时间。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

时间/日期段

两个时间戳用‘–’连接起来就定义了一个时间段:

  <2004-08-23 Mon>--<2004-08-26 Thu>

连续使用C-c . 可以创建时间段

C-c C-y 计算时间段的间隔

7.2 计划时间和截止时间

Org-mode可以为任务设定一个计划时间(SCHEDULED), 输入 C-c C-s,就可以设定光标所在位置所属的任务的计划时间。 而 C-c C-d是输入截止时间(DEADLINE)。

8 全局任务文件清单

前面的内容都是关于单个.org文件的任务管理。Org-mode还支持将多个.org文件组合起来进行管理。这带来很多好处:

你可以按照不同的用途将任务放在不同的文件中进行组织,比如项目,个人事务,家庭等等。

要让Org-mode知道需要把哪些文件视为全局任务的组成部分,需要设定一个清单,可以在.emacs中这样设置:

(setq org-agenda-files (list "~/.todos/work.org"
                             "~/.todos/projects.org"
                             "~/.todos/home.org"
                             "~/Documents/todo/"
                           ))

清单中可以加入文件或目录。如果是目录,该目录下的所有.org文件都会被加入清单。

除了预定义的清单文件,还可以在编辑任务文件(.org)时随时使用C-c [ / ] 将文件加入/移出清单。

可以随时通过C-c '/, 循环打开所有的清单文件。

9 全局 TODO 列表

全局TODO列表列出所有全局任务文件中的未完成任务。通过快捷键 C-c a t 进入全局 TODO 列表。

在全局TODO列表中,用 t 键改变任务状态,;按 RET 跳到该条目所在的源文件。

如果提示C-c a快捷键未定义,是因为Org-mode的快捷键没有启用,需要在.emacs中增加配置:

(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)

10 日程表

有时候可能需要根据未完成任务显示日程安排,通过 C-c a a 可以进入日程表视图。 日程表根据任务的计划时间列出每天的任务。

在日程表视图中按 "l"(小写字母L) 显示日志。这样就会显示你所有已经完成的任务和他们完成的时间。

11 小结

这里涉及到的都是关于Org-mode任务管理的一些基本使用,正是这些强有力的基础,使得Org-mode可以用于时间管理(GTD)、项目计划和管理、 工作日志等各种用途。


Date: 2012-04-14 22:06:40 CST

Author: Holbrook

Org version 7.8.08 with Emacs version 23

Validate XHTML 1.0

分享到:
评论

相关推荐

    Org-mode简明教程.pdf

    Org-mode 是一个为 Emacs 编辑器设计的个人信息管理和大纲编辑工具。它允许用户创建结构化的笔记和文档,支持任务管理、时间规划以及数据的组织。 2. **Org-mode的特性** Org-mode 拥有丰富的功能,包括但不限于...

    Emacs-Org-dev-源码.rar

    Emacs-Org-dev 源码是开源组织和任务管理工具 Org-mode 在 Emacs 编辑器中的开发版本。Org-mode 是一个极其强大的文本编辑模式,主要用于编写笔记、组织任务、项目管理和时间跟踪,同时它也支持创建复杂的文档结构,...

    org-mode官方文档

    Org-mode是一个强大的工具,主要用于记录笔记、撰写文章、维护项目任务列表、管理日程等。它支持强大的内建功能,如大纲结构管理、链接、待办事项列表、标签、属性和列、日期和时间处理、捕获、重新组织和存档等功能...

    学习笔记:使用emacs-org-mode编写笔记

    通过下载名为“study-notes-master”的压缩包,你可以获得一个完整的示例学习笔记库,进一步了解如何在实际操作中运用Emacs Org-Mode进行知识管理。这个压缩包可能包含了各个IT主题的实例,以及如何组织和维护这些...

    emacs org-mode教程

    **Org-Mode** 是 Emacs 中一种非常强大的模式,它不仅提供了一个高效的文字处理环境,还支持任务管理、项目规划、笔记记录等功能。该模式的核心在于其对结构化文档的支持以及强大的组织能力。 **1.1 概述** Org-...

    emacs org-mode guide

    - **Org-Mode简介:** Org-Mode是一种基于纯文本的模式,用于记录笔记、管理待办事项列表(TODO lists)以及进行项目规划。它不仅仅是一个编辑器插件,还提供了一个强大的文档创作和发布系统。 - **目标用户:** 本...

    evil-org-mode:emacs org-mode的补充邪恶模式键绑定

    Org-Mode是Emacs中的一个强大的组织和笔记工具,广泛用于任务管理、日程安排、笔记记录、项目规划和文档编写。它支持结构化的文本格式,并可以导出到多种格式,如HTML、PDF和LaTeX。 3. **Evil Mode介绍** Evil ...

    org-mode简明手册

    org-mode是Emacs编辑器中用于文本组织的一个模式,它通过简化大纲模式来提高用户在处理笔记、待办事项和项目计划时的效率。org-mode支持多种功能,包括但不限于结构化编辑、待办事项管理、标签系统、日期和时间处理...

    org-mode记忆卡片

    org-mode是一种非常强大的组织工具,它允许用户创建结构化的笔记,并且可以利用其丰富的功能进行时间管理、任务规划、文章撰写等。 在【部分内容】中,可以提取以下知识点: ***-mode的基础操作,比如创建表格、...

    emacs python-mode 及使用方法

    Python Mode是Emacs中的一个插件,专为编写Python代码设计,旨在提高开发效率和代码质量。本文将深入探讨emacs python-mode的安装、配置、基本使用以及一些高级特性。 ### 一、安装emacs python-mode 1. **源码...

    emacs-lisp-org.pdf

    标题中提到的"emacs-lisp-org.pdf"暗示了文档可能与Emacs编辑器中的org-mode有关,而且它可能涉及到Lisp编程语言,因为org-mode是用Lisp编写的。 描述中提到“emacs org-mode 完全掌握”,说明文档可能是为了帮助...

    org-jekyll-mode:使用 org-mode 编写 Jekyll 帖子的 Emacs 扩展

    org-jekyll-mode WIKI介绍org-jekyll-mode 是一个 emacs 插件,它可以轻松创建 org-mode 文件,其名称类似于 jekyll 帖子格式,并将 org-mode 文件发布到标准 jekyll 帖子。 org-jekyll-mode 还支持用户在 org-mode ...

    从零到Emacs和Org-roam:从零开始到在Windows 10上安装和设置Emacs和Org-roam的分步指南

    Emacs是一款强大的、高度可定制的文本编辑器,拥有丰富的扩展功能,被广泛应用于编程、文档编写、笔记管理等多个领域。Org-roam是基于Emacs的个人知识管理系统,深受知识工作者喜爱,它借鉴了Zettelkasten方法,用于...

    org-mode-introduction

    Org Mode作为一种专为Emacs设计的主要模式(Major Mode),旨在通过纯文本文件的形式帮助用户更好地记录笔记、规划项目并管理个人事务。本文将详细介绍Org Mode的核心功能、操作方式及其在项目规划中的应用价值。 #...

    org-kanban:使用emacs的org-mode进行看板的简单方法

    Org-Mode是Emacs中的一个强大组织工具,支持任务管理、日程安排、笔记记录等功能。它以其简洁的语法和高度可定制性,深受程序员和知识工作者的喜爱。而Kanban看板则是一种可视化的工作流程管理系统,通过划分“待办...

    org-mode-guide

    **org-mode** 是一个用于在 Emacs 中高效管理笔记、待办事项列表以及项目规划的强大工具。它支持纯文本格式,便于快速创建与编辑文档,并且能够进行丰富的导出与发布操作。此外,**org-mode** 还具备强大的源代码...

    org-superstar-mode:使org-mode星级更超级

    Org-mode是Emacs文本编辑器中的一个强大框架,主要用于组织、计划、笔记和项目管理。它的灵活性和可扩展性使得它在程序员、作家、学生等众多用户群体中广受欢迎。"org-superstar-mode"是org-mode的一个扩展,旨在...

    org-wiki:建立在Emacs org-mode之上的Emacs org-mode Wiki

    Org-Wiki是基于Emacs Org-Mode构建的一种个人知识管理工具,它允许用户创建和组织一个功能丰富的Wiki系统。这个系统充分利用了Emacs的强大编辑功能和Org-Mode的灵活性,为用户提供了高效、结构化的笔记和知识存储...

    emacs常用配置文件,包括 行号显示、载入 主题、 org-mode常用配置

    emacs常用配置文件,包括 行号显示、载入 主题、 org-mode常用配置。下载后请放到 ~主目录下即可,或者自己新建一个.emacs,用记事本打开拷过去。

    haskell-mode emacs

    在 Emacs 中,`haskell-mode` 是一个专门为了提升 Haskell 开发体验而设计的模式。 `haskell-mode` 提供了多种增强功能,旨在帮助 Haskell 开发者更高效地编写、调试和理解代码。这个模式包括以下关键特性: 1. **...

Global site tag (gtag.js) - Google Analytics