## 第?32?章?組織你的意念:Emacs org mode
**目錄**
[](ch32.html#id3155355)
[引子](ch32s02.html)
[](ch32s03.html)
[簡介](ch32s03.html#id3155525)
[配置](ch32s03.html#id3155572)
[建立一個 org 文件](ch32s03.html#id3155664)
[大綱](ch32s03.html#id3155803)
[內容](ch32s03.html#id3156152)
[標簽](ch32s04.html)
[使用](ch32s04.html#id3156199)
[定義](ch32s04.html#id3156315)
[查詢](ch32s04.html#id3156391)
[事件](ch32s05.html)
[定義](ch32s05.html#id3156534)
[操作](ch32s05.html#id3156626)
[日程表](ch32s05.html#id3156706)
[優先級](ch32s05.html#id3156869)
[進度](ch32s05.html#id3156900)
[時間](ch32s06.html)
[列視圖](ch32s07.html)
[典型應用](ch32s08.html)
[清單](ch32s08.html#id3157237)
[日志](ch32s08.html#id3157250)
[頭腦碎片整理](ch32s08.html#id3155279)
## 引子
真正優秀的軟件,通常都包括多個平臺的版本,OneNote 是個例外[[81](ch32s02.html#ftn.id3155369)]
不只一次,我聽到很多 Linux 的用戶抱怨開源軟件中沒有可以替代 OneNote 的軟件。當然也有許多種權宜之計來解這個燃眉之急,比如 SunBird、osmo,甚至是 Wiki、Blog
SunBird、osmo 的操作太過 Windows,并且不如 OneNote 好用;Wiki、Blog 部署成本太高,且不夠靈活……
Emacs 的 Org-mode 在一定程度上可以替代 OneNote,有些方面甚至更好
| | Org-mode | OneNote |
| --- | --- | --- |
| 標簽 | 強大 | 不支持 |
| 日程表 | 強大 | 不支持 |
| 界面 | 字符 | 漂亮 |
| TablePC | 不支持 | 非常好 |
| 摘錄 | 保持源格式 |
| 便捷 | Emacs 內置 | 安裝麻煩 |
* * *
> [[81](ch32s02.html#id3155369)] 不得不承認,OneNote 在 Windows 平臺原生軟件中罕見優秀
### 簡介
Org-mode 主要包含標簽、待辦、日程表幾大部分
**規模效應.?** 如果資料只有幾十幾百條,借助分類的方式可以有效管理,但是資料的條目超過了一定的數量,標簽更管用。好比傳統的郵箱,使用分類的方式管理郵件;而 Gmail 由于起點容量很大,所以提供了標簽
**組織.?** 提供了標簽進行宏觀控制,別外還有日程表作為快速通道
**構思與發布.?** Org-mode 不但可以整理思路,而且擁有比較完善的發布功能
### 配置
首先對 Org-mode 進行一些簡單的配置,在 `.emacs` 文件中寫入:
```
(setq org-hide-leading-stars t)
(define-key global-map "\C-ca" 'org-agenda)
(setq org-log-done 'time)
```
> [](ch32s03.html#org-01) 只高亮顯示最后一個代表層級的 *****
> [](ch32s03.html#org-02) `C-c a` 進入日程表
> [](ch32s03.html#org-03) 給已完成事項打上時間戳。可選 **note**,附加注釋
### 建立一個 org 文件
新建一個名為 `sandbox.org` 的文件[[82](ch32s03.html#ftn.id3155679)],頭部內容如下:
```
#+STARTUP: overview
#+TAGS: { 桌面(d) 服務器(s) } 編輯器(e) 瀏覽器(f) 多媒體(m) 壓縮(z)
#+TAGS: { @Windows(w) @Linux(l) }
#+TAGS: { 糟糕(1) 湊合(2) 不錯(3) 很好(4) 極品(5) }
#+SEQ_TODO: TODO(T) WAIT(W) | DONE(D!) CANCELED(C@)
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
```
> 提示:這里的內容可以隨時更改,但是要記得在改后用 `C-c C-c` 刷新設置
> [](ch32s03.html#org-11) 啟動時概覽
> [](ch32s03.html#org-12) 設定標簽,括弧中的為標簽快捷鍵(如果沒有指定,默認為首字母)。可以設置在多行中
> [](ch32s03.html#org-15) 花括號為標簽組,組中的標簽只能選一個
> [](ch32s03.html#org-13) 設定待辦狀態。將項設置為 `|` 后面的狀態時(DONE CANCELED),會打上 CLOSED 標志
> [](ch32s03.html#org-14) 設定列視圖
### 大綱
在這個新建的文件中插入下面內容:
```
* 工作
** Emacs
神之編輯器
*** org-mode
組織你的意念
** Vim
編輯器之神
** EmEditor
* 娛樂
** Mplayer
全能播放器
* 網絡
** firefox
** IE
** PureFTPD
* 其它
** WinRAR
```
* `*` 之后有一個空格,一定不能省略
* 每一個 `*` 代表一級分支,`***` 就代表第三級分支
現在你的 Emacs 應該顯示這樣的內容

其實這就是一個大綱模式,只是 Org-mode 用更醒目的色彩來顯示,并且快捷鍵方便一些
按下 `S-TAB`,會顯示概覽:

把光標定位在 `* 工作` 這一行,按幾下 TAB

> 提示:連續按下 `TAB` 鍵,會在顯示分支、全部顯示、全部隱藏幾種狀態間循環切換,`S-TAB` 作用于全部分支
以下快捷鍵控制 Org-mode 顯示
| | |
| --- | --- |
| C-c C-a | 全部顯示 |
| C-c C-x b | 在一個新緩沖區中顯示當前分支 |
當一個 `org` 文件內容很多時,使用 Emacs 的快捷鍵移動就很沒有效率,可以使用 Org-mode 內建的移動鍵
| | 向前 | 向后 |
| --- | --- | --- |
| 同級 | C-c C-f | C-c C-b |
| 跨級 | C-c C-n | C-c C-p |
| 上一級 | C-c C-u |
| 跳轉 | C-c C-j |
對分支結構進行修改:
| | |
| --- | --- |
| C-RET | 加入新的同級標識 |
| M-left | 將當前項提升一級 |
| M-right | 將當前項降低一級 |
| M-S-left | 將當前分支提升一級 |
| M-S-right | 將當前分支降低一級 |
| M-S-up | 將當前分支向上移動 |
| M-S-down | 將當前分支向下移動 |
| C-c C-x C-k | 刪除當前分支 |
| C-c C-x M-w | 復制當前分支 |
| C-c C-x C-y | 粘貼分支 |
| C-c C-w | 移動當前分支 |
| C-c * | 為當前分支加入內容 |
### 內容
可以在項標題下隨意的插入內容。通過下面方式插入鏈接:
```
[[鏈接地址][鏈接名稱]]
```
如果不想定義鏈接的名稱,可以這樣:
```
[[鏈接地址]]
```
如果想修改這個鏈接,在鏈接后按下 `backspace`
* * *
> [[82](ch32s03.html#id3155679)] Emacs 打開擴展名為 `.org` 的文件時自動進入 Org-mode
## 標簽
### 使用
對于信息的管理,有分類和標簽兩種方式。
分類的方式,每一個項只能屬于一個分類,但是分類的方法往往不只一種,比如一個軟件,從類型上分,可以有編輯器、瀏覽器等,從評價上分,可以是好、壞;如果使用類型來分類,就不能使用評價來分類;而標簽的方式可以很好的解決這個問題
將光標定位在當前項(Emacs)上,按下 `C-c C-c`

* 注意回顯區中的內容:[a-z]用快捷鍵選取 [SPC]清除所有標簽 [RET]確認 [TAB]自由輸入(不建議) [!]取消組(同一組簽標可以多選) [C-c]單選多選切換
使用快捷鍵 `s` 選中“服務器”,然后再按 `d` 選中桌面,可以看到,兩個不能同時選,因為它們是一組標簽,只能選一個。再分別按下 `e` 和 `5`,回車確認:

接下來在 `*** org-mode` 上 `C-c C-c`

可以看到,它自動繼承了“桌面”、“編輯器”、“極品”三個標簽,而它自己擁有“應用”這個標簽
### 定義
在當前文件頭部進行定義:
```
#+TAGS: { 桌面(d) 服務器(s) } 編輯器(e) 瀏覽器(f) 多媒體(m) 壓縮(z)
```
每項之間必須用空格分隔,可以在括弧里定義一個快捷鍵;花括號里的為標簽組,只能選擇一個
對標簽定義進行修改后,要在文件頭部按下 `C-c C-c` 刷新[[83](ch32s04.html#ftn.id3156348)]
也可以在 Emacs 配置文件 `.emacs` 中進行定義
```
(setq org-tag-alist '(("編輯器" . ?e) ("瀏覽器" . ?f) ("多媒體" . ?m)))
```
在配置文件中設置的是全局標簽,只要是 org-mode,無論是否在頭部進行設置,都可以使用這些標簽。不推薦這種方式
### 查詢
設置標簽的主要目的還是為了查詢。org-mode 會為搜索結果建立一個視圖
| | |
| --- | --- |
| C-c \ | 搜索標簽 |
| C-c / T |
| C-u C-c \ | 搜索帶 TODO 的標簽 |
可以使用邏輯表達式限制條件,更準確靈活的搜索
| | |
| --- | --- |
| + | 和 | a+b | 同時有這兩個標簽 |
| - | 排除 | a-b | 有 a 但沒有 b |
| | | 或 | a|b | 有 a 或者有 b |
| & | 和 | a&b | 同時有 a 和 b,可以用“+”替代 |
在查詢視圖中 `C-c C-c` 退出
* * *
> [[83](ch32s04.html#id3156348)] 在文件頭部按下 `C-c C-c` 為刷新設置;在項標題按下 `C-c C-c` 為設置標簽
## 事件
事件默認有兩種狀態“TODO”、“DONE”,在項標題上 `C-c C-t` 切換事件狀態;`M-S-RET` 新建事件
### 定義
在文件頭部定義事件狀態:
```
#+SEQ_TODO: TODO | DONE CANCELED
#+SEQ_TODO: TODO(T) | DONE(D) CANCELED(C)
#+SEQ_TODO: TODO(T!) | DONE(D@) CANCELED(C@/!)
```
> [](ch32s05.html#org-21) `|` 分隔完成與未完成兩種狀態,完成狀態會打上 CLOSED 時間戳
> [](ch32s05.html#org-22) 設定快捷鍵
> [](ch32s05.html#org-23) `!` 打上時間戳;`@` 要求說明
也可以在配置文件中設置全局事件狀態:
```
(setq org-todo-keywords
'((sequence "TODO" "|" "DONE" "CANCELED")
(sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
))
```
### 操作
| | |
| --- | --- |
| C-u C-c C-t | 手動輸入 TODO 狀態,如果設定快捷則使用快捷鍵輸入 |
| S-right | 循環切換 TODO 狀態,兩個以上 TODO 狀態時使用 |
| S-left |
| C-S-right | 組間切換 |
| C-S-left |
| C-c C-v | 查詢視圖 |
| C-c / t |
| C-c a t | 全局 TODO 列表 |
### 日程表
在 Emacs 配置文件 `.emacs` 定義日程表快捷鍵:
```
(define-key global-map "\C-ca" 'org-agenda)
```
`C-c [` 將當前文件加入日程表,`C-c a`

| | |
| --- | --- |
| a | 本周事件 |
| t | 顯示所有事件 |
| m | 查詢標簽 |
| L | 當前緩沖區時間線 |
| s | 查詢關鍵詞 |
| T | 查詢帶 TODO 關鍵詞的項 |
| M | 查詢帶 TODO 關鍵詞的標簽 |
| # | 顯示已停止事件 |
| q | 退出日程表 |
可以將多個 org 文件從日程表加入、移除,或者將日程表鎖定在當前 org 文件的某個分支:
| | |
| --- | --- |
| C-c [ | 將當前文件加入日程表。如果已加入,移動到前面 |
| C-c ] | 將當前文件從日程表中移除 |
| C-c C-x < | 鎖定到當前樹(只顯示當前樹的事件) |
| C-c C-x > | 解除鎖定 |
### 優先級
事件有“A”、“b”、“C”三種優先級別,使用 `C-c ,` 手動設定級;使用 `S-up` 和 `S-down` 進行調整
### 進度
可以給事件設定進度,使用類似 `[66%]` 或者 `[2/3]` 這樣的形式
## 時間
`C-c C-d` 設定截止日期(DEADLINE);`C-c C-s` 設定計劃(SCHEDULED):

`C-c .`在當前位置插入一個時間戳:

時間標記都會顯示在日程表的本周事件中:

| | |
| --- | --- |
| C-c . | 插入時間戳;如果連續插入兩個時間戳,則插入一個時間范圍 |
| C-u C-c . | 更加精確的時間戳,在日程表中以時間線顯示 |
| C-c ! | 插入時間戳,不在日程表中顯示 |
| C-c < | 直接插入時間戳(當前日期) |
| C-c > | 查看日歷 |
| C-c C-o | 訪問當前時間戳的日程表 |
| S-left|S-right | 以天為單位調整時間戳時間 |
| S-up|S-down | 調整光標所在時間單位;如果光標在時間戳之外,調整時間戳類型(是否在日程表中顯示) |
| C-c C-y | 計算時間范圍長度 |
## 列視圖
`C-c C-x C-c` 進入列視圖;按 `q` 退出:

在文件頭部設置列:
```
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
```
> [](ch32s07.html#org-31) 百分數表示該列所占寬度
> [](ch32s07.html#org-32) 優先級
> [](ch32s07.html#org-33) 事件狀態
> [](ch32s07.html#org-34) 標簽
| | |
| --- | --- |
| C-c C-x C-c | 進入列視圖 |
| r|g | 刷新 |
| q | 退出 |
| left|right | 在列間移動 |
| S-left|S-right | 改變當前列的值 |
| n|p |
| 1~9,0 | 用編號選擇值 |
| v | 查看當前值 |
## 典型應用
復制保存為 `.org` 文件,嘗試進行一些操作
### 清單
```
#+STARTUP: overview
#+TAGS: { 工作(x) 娛樂(y) 雜項(z) }
#+TAGS: { 編輯器(e) 網絡(w) 多媒體(m) 壓縮(z) 窗口管理器(c) 系統(s) 終端(t) }
#+TAGS: { 糟糕(1) 湊合(2) 不錯(3) 很好(4) 極品(5) }
#+SEQ_TODO: TODO(T) WAIT(W) | DONE(D!) CANCELED(C@)
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
* Emacs :工作:編輯器:極品:
* Vim :工作:編輯器:很好:
* EmEditor :工作:編輯器:不錯:
* bash :工作:系統:很好:
* zsh :工作:系統:極品:
* rxvt-unicode :工作:系統:很好:
* tilda :工作:系統:很好:
* awesome :雜項:窗口管理器:很好:
* openbox :雜項:窗口管理器:很好:
* xfce4 :雜項:窗口管理器:不錯:
* firefox :雜項:網絡:很好:
* IE :雜項:網絡:糟糕:
* lftp :雜項:網絡:很好:
* wget :雜項:網絡:很好:
* aria2 :雜項:網絡:很好:
* 迅雷 :雜項:網絡:極品:
* mplayer :娛樂:多媒體:很好:
* 暴風影音 :娛樂:多媒體:不錯:
```
### 日志
```
#+STARTUP: overview
#+TAGS: { 工作(x) 娛樂(y) }
#+SEQ_TODO: TODO(T) WAIT(W) | DONE(D!) CANCELED(C@)
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
* <2008-10-21 二>
** DONE <2008-10-21 二 11:38> :工作:
CLOSED: [2008-10-21 二 11:42]
do …………
** DONE <2008-10-21 二 11:45> :工作:
CLOSED: [2008-10-21 二 11:42]
do …………
** CANCELED <2008-10-21 二 12:38> :娛樂:
CLOSED: [2008-10-21 二 11:42]
- State "CANCELED" [2008-10-21 二 11:43] \\
太忙了
do …………
** DONE <2008-10-21 二 14:50> :工作:
CLOSED: [2008-10-21 二 11:43]
do …………
* <2008-10-22 三>
** DONE <2008-10-22 三 11:38> :工作:
CLOSED: [2008-10-21 二 11:44]
do …………
** WAIT <2008-10-22 三 12:30> :工作:
do …………
** TODO <2008-10-22 三 13:50> :工作:
do …………
** TODO <2008-10-22 三 20:43> :娛樂:
do …………
```
### 頭腦碎片整理
```
#+STARTUP: overview
#+TAGS: { 工作(w) 娛樂(p) 學習(s) }
#+TAGS: { 當前(1) 近期(2) 遠期(3) } { 容易(e) 麻煩(t) 困難(d) }
#+TAGS:
#+SEQ_TODO: 待辦(T) 等待(W) | 完成(D) 取消(C) 委托(A)
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
* 待辦 介紹Org :工作:當前:
** 完成 說明 :容易:
CLOSED: [2008-10-21 二 12:04]
** 完成 截圖 :麻煩:
CLOSED: [2008-10-21 二 12:04]
** 等待 舉例 :困難:
* 學習 :學習:近期:
** 完成 DocBook :麻煩:
CLOSED: [2008-10-21 二 12:05]
** 取消 LaTex :麻煩:
CLOSED: [2008-10-21 二 12:05]
* 健身
** 等待 運動
SCHEDULED: <2008-10-26 日>
** 取消 節食
CLOSED: [2008-10-21 二 12:07]
* 編程
** 待辦 C語言 :學習:近期:困難:
** 待辦 Python :學習:遠期:麻煩:
** 取消 PHP :學習:近期:麻煩:
CLOSED: [2008-10-21 二 12:10]
* 臨時
** org-mode :工作:當前:麻煩:
DEADLINE: <2008-10-21 二>
要配上圖片并舉例
** 委托 Docbook介紹 :工作:當前:容易:
CLOSED: [2008-10-21 二 12:12]
有一點改動
```
使用 Org-mode 的時候其實不用這么一板一眼,可以隨意一些,標簽和日程表可以幫你把它們整理好
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺