## 第 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)
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch32s03.html#org-01) 只高亮显示最后一个代表层级的 *****
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch32s03.html#org-02) `C-c a` 进入日程表
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](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` 刷新设置
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch32s03.html#org-11) 启动时概览
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch32s03.html#org-12) 设定标签,括弧中的为标签快捷键(如果没有指定,默认为首字母)。可以设置在多行中
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch32s03.html#org-15) 花括号为标签组,组中的标签只能选一个
> [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](ch32s03.html#org-13) 设定待办状态。将项设置为 `|` 后面的状态时(DONE CANCELED),会打上 CLOSED 标志
> [![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png)](ch32s03.html#org-14) 设定列视图
### 大纲
在这个新建的文件中插入下面内容:
```
* 工作
** Emacs
神之编辑器
*** org-mode
组织你的意念
** Vim
编辑器之神
** EmEditor
* 娱乐
** Mplayer
全能播放器
* 网络
** firefox
** IE
** PureFTPD
* 其它
** WinRAR
```
* `*` 之后有一个空格,一定不能省略
* 每一个 `*` 代表一级分支,`***` 就代表第三级分支
现在你的 Emacs 应该显示这样的内容
![](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)
其实这就是一个大纲模式,只是 Org-mode 用更醒目的色彩来显示,并且快捷键方便一些
按下 `S-TAB`,会显示概览:
![](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)
把光标定位在 `* 工作` 这一行,按几下 TAB
![](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)
> 提示:连续按下 `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`
![](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)
* 注意回显区中的内容:[a-z]用快捷键选取 [SPC]清除所有标签 [RET]确认 [TAB]自由输入(不建议) [!]取消组(同一组签标可以多选) [C-c]单选多选切换
使用快捷键 `s` 选中“服务器”,然后再按 `d` 选中桌面,可以看到,两个不能同时选,因为它们是一组标签,只能选一个。再分别按下 `e` 和 `5`,回车确认:
![](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png)
接下来在 `*** org-mode` 上 `C-c C-c`
![](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png)
可以看到,它自动继承了“桌面”、“编辑器”、“极品”三个标签,而它自己拥有“应用”这个标签
### 定义
在当前文件头部进行定义:
```
#+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@/!)
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch32s05.html#org-21) `|` 分隔完成与未完成两种状态,完成状态会打上 CLOSED 时间戳
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch32s05.html#org-22) 设定快捷键
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](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`
![](https://box.kancloud.cn/2016-01-06_568cdb4f41fcc.png)
| | |
| --- | --- |
| 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):
![](https://box.kancloud.cn/2016-01-06_568cdb4f5948a.png)
`C-c .`在当前位置插入一个时间戳:
![](https://box.kancloud.cn/2016-01-06_568cdb4f68749.png)
时间标记都会显示在日程表的本周事件中:
![](https://box.kancloud.cn/2016-01-06_568cdb4f83cf0.png)
| | |
| --- | --- |
| 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` 退出:
![](https://box.kancloud.cn/2016-01-06_568cdb4f902e3.png)
在文件头部设置列:
```
#+COLUMNS: %10ITEM %10PRIORITY %15TODO %65TAGS
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch32s07.html#org-31) 百分数表示该列所占宽度
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch32s07.html#org-32) 优先级
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch32s07.html#org-33) 事件状态
> [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](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 章 补遗