使用 Org-mode 进行时间管理

Published on February 12, 2025

使用 Org-mode 进行时间管理

任务流程

flowchart TD
    A[创建] --> B[记录]
    B --> C[完成]
    C --> D[重盘]
    D --> E[调整]
    E --> A

创建任务

1. 创建任务使用 org-capture

org-capture 是 Org-mode 用来快速捕捉任务的功能。通过设置捕获模板,你可以快速创建任务、笔记、待办事项等。使用快捷键 C-c c 启动捕捉界面,然后选择适当的模板。我创建了三个模板,分别是任务、日程和闪念笔记。

(use-package org-capture
  :after org
  :config
  (setq org-capture-templates
        '(("t" "任务" entry (file+headline "~/org/tasks.org" "Tasks")
           "* TODO %?\n  %U\n")
          ("s" "日程" entry (file+headline "~/org/schedule.org" "Schedule")
           "* TODO %?\n  SCHEDULED: %^{Scheduled Time|<%(format-time-string \"%Y-%m-%d %H:%M\")>}T\n  %U\n" :empty-lines 1)
          ("n" "闪念笔记" entry (file+datetree "~/org/notes.org")
           "* %?\n  %U\n")))

  (setq org-agenda-skip-deadline-prewarning-if-scheduled t)

  (setq org-agenda-prefix-format
        '((agenda . " %-12:c%?-12t %s") 
          (todo   . " %-12:c")          
          (tags   . " %-12:c")          
          (search . " %-12:c")))        

  (global-set-key (kbd "C-c c") 'org-capture)
  (global-set-key (kbd "C-c a") 'org-agenda))

每次执行 C-c c 时就会出现下面的界面:

image-20250212124633064

按下对应的的快捷键,你就可以快速记录一个目标信息并将其添加到指定文件。

2. 优先级设置

任务的优先级可以通过 [ #A ][ #B ][ #C ] 来设置,A 为最高优先级,C 为最低优先级。你可以在任务的标题前添加优先级标志来设置任务的优先级。

* TODO [#A] 完成报告

优先级会帮助你在任务众多时区分哪些任务最为紧急。

使用快捷键设置优先级

在 Org-mode 中,你可以通过快捷键来快速设置任务的优先级。具体步骤如下:

  • 设置优先级为 A(最高优先级)
    1. 将光标放在任务标题行(如 TODO)上。
    2. 按下 C-c , A(即 Ctrl-c 然后 , 再按 A)来设置优先级为 [#A]
  • 设置优先级为 B: 按下 C-c , B 来设置优先级为 [#B]
  • 设置优先级为 C: 按下 C-c , C 来设置优先级为 [#C]
  • 清除优先级: 按下 C-c , 然后按 DEL 删除当前任务的优先级。

3.标签设置

在 Org-mode 中,标签(TAGS)是用来给任务或条目打上分类标记的。你可以使用标签来标记任务的类别、状态或者其他你需要的属性,标签可以帮助你在日后通过过滤或搜索任务时更容易地找到它们。

  1. 为任务添加标签

标签通常添加在任务标题的末尾,格式如下:

* TODO 完成报告 :work:important:

在这个示例中,workimportant 是任务的标签。

  1. 使用快捷键快速添加标签

你可以使用org-set-property的快捷键C-c C-q 快速为任务添加标签。

  • 将光标放在任务行(例如 TODO 完成报告)上。
  • 按下 C-c C-q,Org-mode 会启动标签选择器。
  • 输入标签,按回车确认。多个标签用冒号 : 隔开,例如:work:important
  1. 清除标签

如果你想删除任务上的所有标签,可以使用以下命令:

  • C-c C-q,然后删除所有标签。
  • 或者手动删除标签部分。
  1. 查看带标签的任务

你可以使用 Org-mode 的搜索功能,查看特定标签的任务。方法如下:

搜索某个标签的任务:使用C-c a打开org-agenda然后输入/ 进行标签过滤。例如:

  • 输入 /work 可以查看所有带有 work 标签的任务。
  • 输入 /important 可以查看所有带有 important 标签的任务。
  1. 使用 org-tags-view 进行标签筛选

org-tags-view 是另一个用来查看特定标签的功能。你可以通过 C-c a m 来启动该视图,并在提示中输入标签来筛选任务。

4.努力度的设置

在 Org-mode 中,你可以使用 :Effort: 属性来为任务设置 努力度。努力度表示完成某个任务所需要的时间量,通常以小时为单位。例如,可以为每个任务指定一个努力度值,表示预计完成该任务需要的时间。

设置努力度

在任务的标题下,你可以使用 :Effort: 属性来指定预计所需时间。例如:

* TODO [#A] 完成报告
  :PROPERTIES:
  :Effort: 2:00
  :END:

在上面的例子中,:Effort: 设置了任务的努力度为 2:00(表示预计需要 2 小时来完成该任务),此外你还可以使用 30(表示预计需要30分钟完成该任务)。

使用快捷键设置努力度

C-c C-x p 启动 org-set-property 命令后,会提示输入属性名称,此时输入EFFORT后回车即可设置号努力值。此外可以在org-agenda中进入任务列表后按下e键,设置努力值。

执行任务

5. 使用 org-alert 进行任务提醒

org-alert 是一个 Org-mode 扩展,能够基于任务的 SCHEDULEDDEADLINE 字段发送桌面通知。你可以安装并配置 org-alert 来在任务临近时给出提醒。

(use-package org-alert
  :ensure t  ;; 确保安装 org-alert 插件
  :config
  (setq alert-default-style 'libnotify)  ;; 使用 libnotify 风格的通知(适用于 Linux 桌面通知)
  (setq org-alert-interval 1800)  ;; 每 1800 秒检查一次提醒,即每 30 分钟检查一次
  (org-alert-enable))  ;; 启用 org-alert 来开始定期提醒

当任务即将到期时,org-alert 会自动向你发送桌面提醒,确保你不漏掉重要任务。

6. org-agenda的基本使用

org-agenda 用于查看和管理任务,按天、周、月等时间段进行分类显示。使用 M-x org-agenda 启动 Agenda 视图:

image-20250212145354365

你可以执行以下常见操作:

  • t:查看所有的TODO任务。
  • a:查看日程。
  • / :筛选
  • s :查找
  • 等等

a进入日程后,可以使用快捷键切换视图(view)

  • w:一周的日程视图 (默认)
  • d:今天的日程试图

此外,可以通过快捷键切换不同时期,以显示不同的任务

  • f::下一周
  • b:上一周
  • n:下一天
  • p:上一天

当光标移动到指定的任务后,按下回车键即可进入编辑对应任务的细节,或者直接用鼠标右键点击。

你可以通过设置 org-agenda-files 指定要纳入 Agenda 视图的 Org 文件。例如:

(use-package org
  :ensure t
  :config
  ;; 配置 org-agenda 文件
  (setq org-agenda-files '("~/org/tasks.org"
                           "~/org/schedule.org"))
  ;; 设置快捷键
  (global-set-key (kbd "C-c a") 'org-agenda))

7. 使用 org-clock 的快捷键记录时间

org-clock 允许你记录在特定任务上花费的时间。你可以通过快捷键开始和停止计时:

  • 启动计时:C-c C-x C-i
  • 停止计时:C-c C-x C-o
  • 取消计时:C-c C-x C-q

记录时间后,Org 文件会显示类似如下的时间条目:

* 完成报告
  CLOCK: [2025-02-10 Mon 10:00]--[2025-02-10 Mon 12:00]

这样,你就能准确地追踪每个任务的工作时间。

此外,设置努力值后,再启动计时功能会在mode line的右侧显示实际用时和计划用时的信息。

image-20250212144851012

复盘调整

8. 使用 org-clock-report 查看时间报告

org-clock-report 是用来生成基于 org-clock 的时间报告的命令。你可以通过 M-x org-clock-report 来生成一个时间报告。通过设置不同的参数,报告可以按任务、时间段等维度进行汇总。

例如,使用以下代码来显示当前agenda的时钟报告:

BEGIN: clocktable :scope agenda :maxlevel 2
#+CAPTION: Clock summary at [2025-02-12 Wed 15:33]
| File         | Headline                 | Time |      |
|--------------+--------------------------+------+------|
|              | ALL *Total time*           | *3:28* |      |
|--------------+--------------------------+------+------|
| tasks.org    | *File time*                | *3:28* |      |
|              | Tasks                    | 3:28 |      |
|              | \_  学习言语1            |      | 2:27 |
|              | \_  编写org mode管理日程 |      | 1:01 |
|--------------+--------------------------+------+------|
| schedule.org | *File time*                | *0:00* |      |
#+END:

这将显示当前子树内的所有任务及其对应的工作时间。

image-20250212153350151

9. 归档的使用

完成的任务可以通过 org-archive-subtree 或设置 :ARCHIVE 属性进行归档。归档的任务会从当前的 Org 文件中移除,但会默认保存到一个指定以archive字样结尾的归档文件中,以便以后查看和分析。当你完成一个任务时,执行 C-c C-x C-a 将该任务归档。

需要注意的是一旦归档,org-clock-report 将无法再计算归档任务的时间花费。