使用 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
时就会出现下面的界面:
按下对应的的快捷键,你就可以快速记录一个目标信息并将其添加到指定文件。
2. 优先级设置
任务的优先级可以通过 [ #A ]
、[ #B ]
和 [ #C ]
来设置,A 为最高优先级,C 为最低优先级。你可以在任务的标题前添加优先级标志来设置任务的优先级。
* TODO [#A] 完成报告
优先级会帮助你在任务众多时区分哪些任务最为紧急。
使用快捷键设置优先级
在 Org-mode 中,你可以通过快捷键来快速设置任务的优先级。具体步骤如下:
- 设置优先级为
A
(最高优先级):- 将光标放在任务标题行(如
TODO
)上。 - 按下
C-c , A
(即Ctrl-c
然后,
再按A
)来设置优先级为[#A]
。
- 将光标放在任务标题行(如
- 设置优先级为
B
: 按下C-c , B
来设置优先级为[#B]
。 - 设置优先级为
C
: 按下C-c , C
来设置优先级为[#C]
。 - 清除优先级:
按下
C-c ,
然后按DEL
删除当前任务的优先级。
3.标签设置
在 Org-mode 中,标签(TAGS)是用来给任务或条目打上分类标记的。你可以使用标签来标记任务的类别、状态或者其他你需要的属性,标签可以帮助你在日后通过过滤或搜索任务时更容易地找到它们。
- 为任务添加标签
标签通常添加在任务标题的末尾,格式如下:
* TODO 完成报告 :work:important:
在这个示例中,work
和 important
是任务的标签。
- 使用快捷键快速添加标签
你可以使用org-set-property
的快捷键C-c C-q
快速为任务添加标签。
- 将光标放在任务行(例如
TODO 完成报告
)上。 - 按下
C-c C-q
,Org-mode 会启动标签选择器。 - 输入标签,按回车确认。多个标签用冒号
:
隔开,例如:work:important
。
- 清除标签
如果你想删除任务上的所有标签,可以使用以下命令:
- 按
C-c C-q
,然后删除所有标签。 - 或者手动删除标签部分。
- 查看带标签的任务
你可以使用 Org-mode 的搜索功能,查看特定标签的任务。方法如下:
搜索某个标签的任务:使用C-c a
打开org-agenda然后输入/
进行标签过滤。例如:
- 输入
/work
可以查看所有带有work
标签的任务。 - 输入
/important
可以查看所有带有important
标签的任务。
- 使用
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 扩展,能够基于任务的 SCHEDULED
或 DEADLINE
字段发送桌面通知。你可以安装并配置 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 视图:
你可以执行以下常见操作:
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的右侧显示实际用时和计划用时的信息。
复盘调整
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:
这将显示当前子树内的所有任务及其对应的工作时间。
9. 归档的使用
完成的任务可以通过 org-archive-subtree
或设置 :ARCHIVE
属性进行归档。归档的任务会从当前的 Org 文件中移除,但会默认保存到一个指定以archive
字样结尾的归档文件中,以便以后查看和分析。当你完成一个任务时,执行 C-c C-x C-a
将该任务归档。
需要注意的是一旦归档,org-clock-report
将无法再计算归档任务的时间花费。