管理时间管理自己

使用Orgmode进行GTD管理

2019-12-02  本文已影响0人  QuietHeart

这里给出采用orgmode进行gtd管理的策略。

注:orgmode工作目录说明文件(orgmode/gtd/readme.org)即此文的副本,此文定期更新同步到orgmode工作目录的说明文件。

任务状态

状态含义同一般GTD系统,这里先不做深入介绍。主要设置如下任务状态:

划分文件

主要设置如下目录和文件来存放数据:

管理方式:

大致思路:

回顾

回顾种类

回顾内容:

短期回顾

在"短期回顾"中,定期处理inbox中的内容使得收集状态的内容及时被处理。根据情况,可能有如下类型:

对其他状态任务的处理,只需切换相应任务状态,直接在orgmode中的AgendaView中进行可以避免频繁的文件切换。

中期回顾

在"周"回顾中,梳理各种任务状态中的内容,将相关的内容关联起来,将相应的状态内容移动到对应的文件等等。处理方式类似对于inbox的处理,可能有如下类型:

实现方式

下面给出实现上述管理主要需要注意的几个部分。

实现基本Orgmode任务管理

TODO 标题表示任务

按照实现策略进行配置

常用操作

TODO项目相关操作:

默认状态下,循环切换次序是TODO->Done->普通标题(只有*)。

交叉引用

因任务可能会在不同的文件与标题间迁移,所以需要为每一条目采用与文件与位置无关的id,即采用全局唯一id链接的方式实现交叉引用。

  1. 首先配置全局链接

    类似如下:

    ;;Settings for global id link.
    (require 'org-id)
    (setq org-id-link-to-org-use-id t)
    
  2. 为被引用标题创建全局链接id
    保存链接内容的同时也创建了相应的链接。当然,这需要事先配置好保存链接快捷键

    (global-set-key "\C-cl" 'org-store-link)
    

    输入 C-c l 之后便创建好了相应的全局链接,类似如下:

    * 子树标题  
     :PROPERTIES:
     :ID:       60b13787-86e8-43a3-9a33-73d3eb7e6f58
     :END:
    
  3. 引用链接
    像正常插入链接一样,输入 C-c C-l 即可,默认插入最近一次保存的链接。

    引用的格式举例

    [[id:60b13787-86e8-43a3-9a33-73d3eb7e6f58][子树标题]]
    

设置优先级别

可采用四象限法则,将事情按照重要和紧急两个不同的程度进行划分,分为四个“象限”。

我们把事项进行一些梳理,就会清楚自己的时间和精力主要应该用在什么地方了。

设置优先级

通过如下方式:

;;set priority
(setq org-highest-priority ?A)
(setq org-lowest-priority ?D)
(setq org-default-priority ?A)
(setq org-priority-faces '(
                           (?A . org-warning)
                           (?B . (:background "DodgerBlue" :foreground "black" :weight bold)) 
                           (?C . (:foreground "SkyBlue" :weight bold))
                           (?D . (:foreground "DodgerBlue" :weight bold)) 
                           )
)

切换优先级

在标题上输入 S-<up>/<down>

5w1h分析

Capture-Refile-Archive

概念

Capture用来迅速收集一些临时产生的想法,尽可能少的打断当前的工作状态。通过指定好快捷方式和相应的Capture目标位置后,在任意时间运行捕获命令会将这些临时的记录存放在一个指定的位置,空闲之时再做进一步整理。

Refile以特定的命令,用来将之前Capture的内容直接转移到特定的地方,避免了手动剪切(复制)和粘帖。

配置

Capture的配置

不同的管理方式可能会导致不同的配置,但是一般都包含两个方面:首先设置好一个启动Capture的快捷方式,再配置用于存储Capture信息的目的地。
这里以gtd管理为例给出一个配置例子:

;;Setting for gtd captures
;;Directory for capture files.
(setq org-directory "~/mydata/orgmode/")
;;Default capture files.
(setq org-default-notes-file (concat org-directory "gtd/inbox.org"))
;;Capture template
(setq org-capture-templates '(
                              ("t" "Tasks" entry (file+headline "gtd/inbox.org" "Tasks") "* INBOX %?\nTime:%T\nFrom:%F\n")
                              ("p" "Projects" entry (file+headline "gtd/inbox.org" "Projects")  "* %?\nTime:%U\nFrom:%F\n")
                              ("i" "Item notes" item (file+headline "gtd/inbox.org" "Items")  "+ %?\n  Time:%U\n  From:%F\n")
                              ("m" "Misc notes" plain (file+headline "misc.org" "Notes")  "-----------------------------------------------------\nTime:%U\n %?")
                             )
)
 
;;set tags
;;where?(h/o/w),what?(c/l/s),when?(gtd|immeiately,wait,action),who?(my gtd,others),why?how?(delete/archieve/schedule)
(setq org-tag-alist '(
                    (:startgroup . nil)
                         ("home" . ?r) ("office" . ?o) ("way" . ?w)
                    (:endgroup . nil)
                    ("职业" . ?c)
                    ("生活" . ?l) 
                    ("学习" . ?s)
                    ))

Refile的配置

主要配置两个方面的内容:
Refile的目标(org-refile-targets),以及Refile时选择目标的策略(org-refile-use-outline-path会自动补全文件名以及标题,目标的格式类似文件路径的格式,包含文件和标题)。
org-refile-targets对应的可以是路径可以是列表,具体参考其中的文档,需要注意的是:

操作

基于以上配置,我们可以操作如下:

归档

具体配置方式可以参见: C-h v org-archive-default-command, C-h v org-archive-location, C-h v org-archive-save-context-info

配置归档位置和归档后附带信息

将内容根据“年-月-日-包含文件名的标题-被归档的标题”的层次,归档在指定的_archive/session<年月>_archive.org文件中,归档之后,被归档节点属性包含:时间、文件、标签、todo状态、分类、节点在归档前的路径等信息。

;;location for archive
(setq org-archive-location (concat org-directory "gtd/_archive/" (format-time-string "%Y%m") "_archive.org::datetree/* Archive from %s"))
;;information added to property when a subtree is moved
(setq org-archive-save-context-info '(time file ltags itags todo category olpath))

注意,以上归档文件名为类似 session201511_archive.org ,这里的时间应该是启动Emacs会话的时间并非归档操作的时间。

归档命令

输入 C-c C-x C-s

举例

如上配置之后,例如

*Title1
**DONE sub title1 
CLOSED: [2015-11-27 五 14:17]
- State "DONE"       from              [2015-11-27 五 14:17]
***subsub title1
****DONE subsubsub title1
CLOSED: [2015-11-27 五 14:18]
- State "DONE"       from              [2015-11-27 五 14:18]
****subsubsub title2
****subsubsub title3
***subsub title2
**sub title2

注意以上格式中,标题前面应该和'*' 之间有一个空格。执行 C-c C-x C-s 之后,会在相应路径生成一个201510_archive.org文件,追加了如下内容:

*2015
**2015-11 十一月
***2015-11-27 星期五
****Archive from orgmodetest.org
*****DONE subsubsub title1
CLOSED: [2015-11-27 五 14:18]
:PROPERTIES:
:ARCHIVE_TIME: 2015-11-27 五 14:23
:ARCHIVE_FILE: ~/test/emacs/orgmodetest.org
:ARCHIVE_TODO: DONE
:ARCHIVE_CATEGORY: orgmodetest
:ARCHIVE_OLPATH: Title1/sub title1/subsub title1
:END:
- State "DONE"       from              [2015-11-27 五 14:18]

便于整理周报的记录技巧

为便于整理工作周报,可以将每天的记录工作首先按日期时间在每个TODO项目上创建子标题。每个子标题下记录详细工作日记日志。

例如:

*[2015-10-30 五 09:43] xxxxxx

如果需要在agenda中列出时间,那么使用激活的时间戳即可。标题尽量简单叙述当前的工作情况。写周报的时候只看这个地方就行了。

另外,每个TODO任务中如果设置了状态切换的日志,这样可能会和处理进度的子标题有些意义冲突,目前对此不做过多考虑,不会在状态切换日志中记录过多信息,并且状态切换日志仅在wait和cancel中记录。

经过以上方式之后,做周报时,大致可以按照每个TODO项的日期时间标题来进行搜集。

orgmode与mobile org整合

MobileOrg是Mobile端的一个应用程序,运行在Android(也有IOS的MobileOrg);Org是PC端Emacs的一个插件应用,对应其Orgmode模式。

对其具体操作方式在orgmode的文档中有专门的介绍,并且不断更新,这里讲述相对固定的管理方式方面的内容。描述如何用Org创建可以通过MobileOrg显示的文档格式,以及如何将Mobile端的MobileOrg中修改和捕获的笔记,集成到PC端的“主” Org mode系统中(即Org与MobileOrg的同步),不涉及Agenda相关的操作。

配置

为了在MobileOrg中能够修改tags和TODO状态,你应该在PC端设置好自定义变量: org-todo-keywordsorg-tag-alist ,使它们包含所有需要修改的重要的tags和TODO keywords,哪怕每个文件只使用其中的部分内容。MobileOrg也能通过in-buffer settings来为你提供TODO和tags设置,但是它只能读懂这些变量中的那些设置好的TODO状态集合以及tags。

假设我们想要使PC上的Org与移动设备上的MobileOrg保持内容同步(底层通过git机制,也可以是云存储、ssh、ftp等机制)。这里给出为实现这个目的,在PC需要做的配置工作(移动端的MobileOrg做为辅助工具,其配置和操作非常简单,在适当的时候会提及)。

在PC上添加使用MobileOrg的emacs配置

主要包括对Emacs中org-mode模块的加载以及与MobileOrg同步的路径。
例如:

;;Sync with mobileorg
(require 'org-mobile)
;;mobile stage
(setq org-mobile-directory "/home/miracle/mygitrepo/pocket/MobileOrg")

另外,可以通过 org-mobile-encryption-password 设置加密方面的内容。
在后面我们可知,在PC上的orgmode中有特定的命令将相关内容推送到这个目录中。

在PC上添加同步orgmode和MobileOrg的emacs配置

主要包括PC端和MobileOrg端状态与标记的设置,PC上被推送orgmode内容的源文件路径,以及PC上接收MobileOrg修改的缓存路径设置。

  1. 为被推送文件定义只属于该文件的状态和标记

    被推送的文件可使用文件选项定义相关的状态和标签(实践发现不用定义文件的状态和标签也行),定义内容最好和PC上的相关状态变量(即 setq org-todo-keywords )一致,或者是其子集。如果使用文件定义状态,那么可以将用于push到MobileOrg的文件中的状态设置选项如下:

    #+TODO: INBOX(i!) NEXT(n!) LATER(l!) WAIT/FORWARD(w@/!) MAYBE/FUTURE(m!) | CANCEL(c!) DONE(d!)
    

    标记的设置类似。

  2. 设置状态关键字和被推送至MobileOrg的文件列表路径

    如下

    ;;set status for TODO.
    (setq org-todo-keywords '((sequence 
    "INBOX(i!)"
    "NEXT(n!)"
    "LATER(l!)"
    "WAIT/FORWARD(w@/!)"
    "MAYBE/FUTURE(m!)"
    "|" "CANCEL(c!)" "DONE(d!)"
    ))
    )   
    
    ;;mobile push
    (setq org-mobile-files (list 
    (concat org-directory "gtd/mobile_org")
    )
    )
    
  3. 设置接收来自MobileOrg内容的“缓存”目标文件路径

    如下

    ;;mobile pull
    (setq org-mobile-inbox-for-pull 
    (concat org-directory "gtd/from_mobile.org")
    )
    

原理

Mobile端的Mobile Org与PC端的Org同步

当我们在MobileOrg中与PC端的Org同步时,需要知道它不仅仅是从PC端获取(mobile端的pull)相应org文件用于浏览,同时也会追加(mobile端的push)被captured的entries,并且指向被标记和修改的entries,这些内容被汇总在同步目录( org-mobile-directory )中的 mobileorg.org 文件里。

PC端的Org与Mobile端的MobileOrg同步

  1. PC端的Pull

    获取MobileOrg修改内容(PC端的pull)的时候,会将这些信息从 mobileorg.org 先转移到到 org-mobile-inbox-for-pull 对应的文件中,并对指向的被标记的内容进行进一步操作,进而将能够自动处理内容同步到对应的文件中。
    Pull的过程大致过程如下:

    1. Org将会将 mobileorg.org 中的所有entries移动到 org-mobile-inbox-for-pull 所指向的文件(假设为mobileinbox),每个被捕获的entry和编辑事件都会被做为这个mobileinbox中的顶级entry而存在。(进行操作之后, mobileorg.org 将会被清空)
    2. 当将entries移动到 org-mobile-inbox-for-pull 指向的文件之后,Org将会开始执行在MobileOrg进行的修改。有些修改直接就会被应用了不需要额外的用户交互(例如修改tag、TODO状态、标题、正文文本可以被简单的应用)。而需要额外动作的entries会接收到一个:FLAGGED:的tag,这样它们才会很容易地被找到。当应用修改或者寻找一个entry之时出现了问题,目标entry将会保持在 org-mobile-inbox-for-pull 中,并且被标记一个错误信息,我们需要之后手动解决这些问题,并将对应内容(entry)转移到期望的位置。
    3. (不熟悉)Org之后会生成一个包含所有flagged的entries的agenda view,用户可以遍历这些entries来做一些必要的动作。如果在对MobileOrg中的entry进行标记的时候一个note已经存储了,那么这个note会在光标处于对应agenda line的时候在回显区域显示出来。
      关于 ?
      在哪个特定的agenda中按下 ? 将会在另外一个windows中显示整个被标记的笔记(flagging note),也会将它push到kill ring中。所以,你可以在这个entry中使用 ?z C-y C-c C-c 保存哪个标记笔记为普通笔记。连续键入 ? 两次将会体同将 :FLAGGED:标签联通记录的标记笔记(flagging note)(在一个属性中被保存)一起被移走。这样,你可以用此来表示这个 flagged entry的处理已经完成。如果你不能够直接处理所有的flagged entries,你可以通过 C-c a 回到这个agenda view。
  2. PC端的Push

    推送内容到MobileOrg端(PC端的push)的时候,会推送PC上设置的 org-mobile-files 对应的文件,该变量对应的文件路径是相对 org-directory 的路径,默认使用 org-agenda-files ,被退送的目标是 org-mobile-directory 设定的位置。
    Push的过程大致如下:

    1. 拷贝 org-mobile-files 中的内容到同步目录 org-mobile-directory 中,文档中提到,如果待推送的文件是一个链接文件,那么链接文件名称需要和源名称一致。
    2. 创建特定的agendas.org文件,这些文件可以是用户自定义的agenda view,由 org-mobile-agendas 来设定。
    3. 最后,orgmode会写一个 index.org 文件,这个文件包含所有到其他文件的链接,Mobile首先在Server中读取这个文件,然后把这个文件中列出的所有agendas文件和org文件下载下来,为了加速下载过程,MobileOrg只读取checksums3被改变的文件。

Org与MobileOrg的同步目录

我们需要注意,在前面的讲述中所涉及到的同步,其实暗含了两种同步:

  1. Mobile端的MobileOrg与PC端的Org之间的同步(通过设定一个同步目录做为中转)
    这个前面也讲到,主要是Mobile端的Sync(包含Push/Pull)操作,以及PC端的Push/Pull操作。

  2. 同步目录在云端与PC/Mobile端的同步
    前面MobileOrg和Org同步之时,需要经过它们之间的一个共通的“同步目录”。这个目录在Mobile端和PC端的内容和结构需要首先保持一致,才能保证后续MobileOrg和Org之间数据的同步一致。所以,我们在同步PC端的Org与Mobile端的MobileOrg之前,先将PC端和Mobile端的目录通过某种方式进行同步。

    这里同步目录的方式使用用git进行,PC端和Mobile端之间的同步目录用某个git托管服务器进行管理(例如github、bitbucket、或者自己的服务器),任意端的同步目录中数据发生变化后都要推送到托管服务器中,而任意端要读取最新数据都需要从托管服务器中拉取数据,同步目录中的数据更新之后,再进行后续MobileOrg和Org的数据更新。我们也可使用其它方式管理同步目录,比如云存储(百度云、DropBox等)、或者ftp、webdav、ssh等。

    另外,Mobile端的git可以使用pocketgit工具。

同步操作

PC端的Org推送(Pull)

命令如下:
M-x org-mobile-push
推送之后,会在同步目录(即 org-mobile-directory 对应的路径)中建立 org-mobile-files 对应文件列表的路径结构,并拷贝相应文件到其中。

PC端的Org拉取(Push)

命令如下:
M-x org-mobile-pull
运行之后,其对应的 org-mobile-files 便包含了和MobileOrg同步的内容。

Mobile端的MobileOrg同步(Sync)

这里使用Android版本的MobileOrg,大致如下:
首先设置好同步目录,然后选择软件界面中的"Sync"按钮,即可完成同步(包含Pull和Push)。

使用举例

  1. PC上配置好相关变量和目录
  2. 手机上安装好MobileOrg也设置好同步目录
  3. 将PC和手机上的同步目录用github/bitbucket管理
  4. PC上同步目录更新: git/pull
  5. PC上记录之前运行: org-mobile-pull 可以看到手机上修改的内容。
  6. PC上记录,记录之后运行: org-mobile-push
  7. PC上的git同步目录上传修改: git add/commit/push
  8. 手机上的git同步目录下载更新: git pull
  9. 手机上的MobileOrg同步(点击Sync)
  10. 手机上看到PC修改的内容
  11. 手机上修改并同步(点击Sync)
  12. 手机上更新同步目录: git add/commit/push
  13. 回到步骤4。

其它

目前发现,该功能列表中的段落,无法识别断行?对复杂的管理不是非常实用,相对而言,mobile org中Capture功能相对实用一些,可以将片段捕捉下来,同步到电脑上(但是同步的过程也比较繁琐)。

参考相关文档:MobileOrg

改进

WAIT/FORWARD FAQ <code>[8/11]</code>(<code>[72%]</code>)

DONE 如何划分任务状态以及存放的文件?

参见: 任务状态 (参见第1节) 和 划分文件 (参见第2节)

DONE 如何实现任务管理的基本管理?

参见:实现Orgmode任务管理的基本管理 (参见第4.1节)

DONE 如何设置交叉引用?

参考:交叉引用 (参见第4.2节)

DONE 如何设置优先级别?

参考:设置优先级别 (参见第4.3节)

DONE 如何迅速捕获临时产生的任务,以及将各个任务标题在状态文件中进行转移?

参见:Capture-Refile-Archive (参见第4.4节)

DONE 如何设置归档?

参见:归档 (参见第4.5节)

DONE 便于整理周回顾?

参见:便于整理周报的记录技巧 (参见第4.6节)

DONE 如何将PC与移动端的orgmode整合?

参见:orgmode与mobile org整合 (参见第4.7节)

LATER 杂乱问题

这里描述一些无法分类是杂乱问题。

NEXT 改善归档与done/cancel策略

之前都是将done和cancel状态的内容放置目录中,按照月份存放相应状态内容,原因是相应状态的内容是属于不断积累增多的,不可能只放在一个文件中。

考虑到归档的功能,其实将done/cancel内容放置在一个文件也可,只需要定期进行归档即可,积累的内容会不断地移动到归档中,而归档又可根据日期来进行划分。

而wait/forward中的内容,需要再考虑如何进行,目前暂不设定归档, 设置的方式也仍然采用目录的方式,以便学习时能够知道目录目标的设置方式。

NEXT 改善refile的配置方式

将refile目标放置到一个文件中,有时候会出现问题,目前不再使用这个方法。直接将refile的目标配置到配置文件中,这样更为保险。

;;set agenda files
(setq org-agenda-files (list 
                        (concat org-directory "gtd/_next.org") 
                        (concat org-directory "gtd/_later.org") 
                        (concat org-directory "gtd/_wait_forward.org") 
                        (concat org-directory "gtd/_maybe_future/") 
                        (concat org-directory "gtd/_cancel.org")
                        (concat org-directory "gtd/_done.org") 
                        (concat org-directory "gtd/mobile_org/_mobile_inbox.org") 
                        (concat org-directory "gtd/_active") 
                        (concat org-directory "gtd/_review") 
                        (concat org-directory "gtd/output/")
                       )
)
上一篇下一篇

猜你喜欢

热点阅读