Emacs學習筆記(10):Org-mode,最強的任務管理利器,沒有之一

來源:互聯網
上載者:User
Org-mode,最強的任務管理利器,沒有之一

程式員對於“TODO”這個詞一定不陌生。一個TODO意味著有一件事情需要去做。更深入一步來說,TODO是一個未完成的任務。

Org-mode能夠完美解決任務管理的各種問題,包括任務/子任務的劃分,關鍵時間的設定,任務狀態變化的跟蹤,以及任務的檢索和查詢。 再配合Org-mode的強大編輯功能, 能夠實現很多功能,比如時間管理(GTD),專案計劃和管理,工作日誌等。

本文介紹Org-mode強大的任務管理功能。

Table of Contents
  • 1 定義任務和子任務
  • 2 定義任務狀態
  • 3 設定任務優先順序
  • 4 跟蹤子任務完成情況
  • 5 用複選框標記非標題類型的子任務
  • 6 查詢任務
  • 7 任務的時間計劃
    • 7.1 時間戳記
    • 7.2 計劃時間和截止時間
  • 8 全域任務檔案清單
  • 9 全域 TODO 列表
  • 10 議程表
  • 11 小結
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

與子任務類似,步驟的狀態變化會改變上級步驟/任務的完成情況。 下面是複選框相關的命令:

 
KEYS COMMENT
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.