本篇文章大部分引用自:org-mode: 最好的文档编辑利器,没有之一,
同时结合自己的实践,整理而成。
一、org-mode
org-mode官方定义:1
Org is a mode for keeping notes, maintaining TODO lists, and doing project planning with a fast and effective plain-text system.
Org是一个基于快速高效的文本方式来实现做笔记、管理待办事项(TODO list)以及做项目计划的模式。
使用emacs做时间管理正是利用org-mode对文本的强大操作能力,所以我们首先要学习org-mode的基本概念及操作。
二、大纲
org-mode强大的操作能力源于它对大纲的支持。
1、定义一个标题
要定义一个大纲,首先要定义标题,定义标题的方式非常简单,使用*
即可:
1 | * 这是一个一级标题 |
注意两点:
*
要位于行首*
后面要有一个空格
2、大纲相关的快捷键
折叠
快捷键 | 功能 |
---|---|
S-TAB | 循环切换整个文档的大纲状态(三种状态:折叠,打开下一级,打开全部) |
TAB | 循环切换光标所在大纲的状态 |
大纲间移动
快捷键 | 功能 |
---|---|
C-c C-n/p | 下/上一标题 |
C-c C-f/b | 下/上一标题(仅限同级标题) |
C-c C-u | 跳到上一级标题 |
C-c C-j | 切换到大纲浏览状态 |
基于大纲的编辑
快捷键 | 功能 |
---|---|
M-RET | 插入一个同级标题 |
M-S-RET | 插入一个同级TODO 标题 |
M-LEFT/RIGHT | 将当前标题升/降级 |
M-S-LEFT/RIGHT | 将子树升/降级 |
M-S-UP/DOWN | 将子树上/下移 |
C-c * | 将本行设为标题/正文 |
C-c C-w | 将子树或区域移动到另一标题处(跨缓冲区) |
C-x n s/w | 只显示当前子树/返回 |
C-c C-x b | 在新缓冲区显示当前分支(类似C-x n s) |
C-c / | 只列出包含搜索结果的大纲,并高亮,支持多种搜索方式 |
C-c C-c | 取消高亮 |
在spacemacs下,更多的快捷键可以通过SPC ?
,即空格加问号查看,非常的方便,基本上不需要我们自己记忆,这也正是spacemacs的优点所在。
3、大纲的显示方式
默认的大纲显示没有缩进,显得有些乱。可以用SPC : org-indent-mode
切换到另一种显示方式:
如果想让某个文件默认用这种方式打开,可以在文件头部增加:
1 | +STARTUP: indent |
如果希望打开所有org文件都默认用这种方式,可以在.emacs中配置:
1 | (setq org-startup-indented t) |
二、轻量级标记语言
前面的大纲和超链接都是使用标记来定义的。实际上,Org现在已经成为一种专门的轻量级标记语言,与Markdown、reStructedText、Textile、RDoc、MediaWiki等并列。
1、字体
1 | *粗体* |
2、表格
Org 能够很容易地处理 ASCII 文本表格。任何以‘|’为首个非空字符的行都会被认为是表格的一部分。’|‘也是列分隔符。一个表格是下面的样子:
1 | | Name | Pone | Age | |
你可能认为要录入这样的表格很繁琐,实际上你只需要输入表头“|Name|Pone|Age”之后,按C-c RET,就可以生成整个表格的结构。类似的快捷键还有很多:
创建和转换表格
快捷键 | 说明 |
---|---|
C-c 竖线 | 创建或转换成表格 |
调整和区域移动
快捷键 | 说明 |
---|---|
C-c C-c | 调整表格,不移动光标 |
TAB | 移动到下一区域,必要时新建一行 |
S-TAB | 移动到上一区域 |
RET | 移动到下一行,必要时新建一行 |
编辑行和列
快捷键 | 说明 |
---|---|
M-LEFT/RIGHT | 移动列 |
M-UP/DOWN | 移动行 |
M-S-LEFT/RIGHT | 删除/插入列 |
M-S-UP/DOWN | 删除/插入行 |
C-c - | 添加水平分割线 |
C-c RET | 添加水平分割线并跳到下一行 |
C-c ^ | 根据当前列排序,可以选择排序方式 |
3、段落
对于单个回车换行的文本,认为其属于同一个段落。在导出的时候将会转化为不换行的同一段。如果要新起一个段落,需要留出一个空行。 这点与markdown类似。
4、列表
Org 能够识别有序列表、无序列表和描述列表。1
2
3
4无序列表项以‘-’、‘+’或者‘*‘开头。
有序列表项以‘1.’或者‘1)’开头。
描述列表用‘::’将项和描述分开。
有序列表和无序列表都以缩进表示层级。只要对齐缩进,不管是换行还是分块都认为是处于当前列表项。
同一列表中的项的第一行必须缩进相同程度。当下一行的缩进与列表项的的开头的符号或者数字相同或者更小时,这一项就结束了。当所有的项都关上时,或者后面有两个空行 时,列表就结束了。例如:
1 | My favorite scenes are (in this order) |
列表操作快捷键
为了便利,org-mode也支持很多列表操作的快捷键,大部分都与大纲的快捷键类似:
快捷键 | 说明 |
---|---|
TAB | 折叠列表项 |
M-RET | 插入项 |
M-S-RET | 插入带复选框的项 |
M-S-UP/DOWN | 移动列表项 |
M-LEFT/RIGHT | 升/降级列表项,不包括子项 |
M-S-LEFT/RIGTH | 升/降级列表项,包括子项 |
C-c C-c | 改变复选框状态 |
C-c - | 更换列表标记(循环切换) |
5、分隔线
五条短线或以上显示为分隔线。
1 | ------ |
五 、标签
1、tag的作用
对于信息的管理,有分类(category)和标签(tag)两种方式。这两种方式各有特点:
通常分类是固定的,很少变化,而tag随时可以增加。 分类通常表现为树状结构,比较清晰,但是树状结构过于简单,不能表达复杂的信息。比如,如果有多个分类树,处理起来就会比较麻烦。
所以,这两种方式通常结合起来使用。比如blog系统中,通常既支持文章的分类(树),又支持为每篇文章作tag标记。
org-mode作为最好的文档编辑利器 ,在支持文内大纲(也是树状结构)的同时,还方便的支持tag功能。tag可以在多篇文档中共用。
2、标记tag
在Org-mode中,可以对标题增加tag标记。标记的格式如下:1
标题 :标记1标记2:标记3:
而且Org-mode的标签自动按照大纲树的结构继承。即子标题自动继承父标题的标签。比如:1
2
3* Meeting with the French group :work:
** Summary by Frank :boss:notes:
*** TODO Prepare slides for him :action:
则最后一行标题具有 work, boss, notes, action 四个标签。
如果希望文档中的所有标题都具有某些标签,只需要定义文档元数据:1
# +FILETAGS: :Peter:Boss:Secret:
如果手工输入标签,在标题后设置标签,键入:后,M-Tab自动提供标签的补齐。
更方便的做法是在正文部分用C-c C-q 或直接在标题上用C-c C-c创建标签,这种方式可以列出所有预定义的标签以便选取。
3、预定义tag
上面提到,除了可以输入标签外,还可以从预定义的标签中进行选择。预定义的方式有两种:
在当前文件头部定义:
这种方式预定义的标签只能在当前文件中使用。使用# +TAGS元数据进行标记,如:
1 | +TAGS: { 桌面(d) 服务器(s) } 编辑器(e) 浏览器(f) 多媒体(m) 压缩(z) |
每项之间必须用空格分隔,可以在括号中定义一个快捷键;花括号里的为标签组,只能选择一个
对标签定义进行修改后,要在标签定义的位置按 C-c C-c 刷新才能生效。
在配置文件中定义 上面的标签定义只能在当前文件生效,如果要在所有的.org 文件中生效,需要在 Emacs 配置文件 .emacs 中进行定义:1
2
3
4
5
6
7
8
9(setq org-tag-alist '(
(:startgroup . nil)
("桌面" . ?d) ("服务器" . ?s)
(:endgroup . nil)
("编辑器" . ?e)
("浏览器" . ?f)
("多媒体" . ?m)
))
默认情况下,org会动态维护一个Tag列表,即当前输入的标签若不在列表中,则自动加入列表以供下次补齐使用。
为了使这几种情况(默认列表、文件预设tags,全局预设tags)同时生效,需要在文件中增加一个空的TAGS定义:
1 | +TAGS: |
4、 按tag搜索
使用标签可以更好的管理内容。org-mode提供了以下功能:
快捷键 | 说明 |
---|---|
C-c \ | 按tag搜索标题 |
C-c / m | 搜索并按树状结构显示 |
C-c a m | 按标签搜索多个文件(需要将文件加入全局agenda) |
可以使用逻辑表达式限制条件,更准确灵活的搜索:1
2
3
4+ 和 a+b 同时有这两个标签
- 排除 a-b 有 a 但没有 b
| 或 a|b 有 a 或者有 b
& 和 a&b 同时有 a 和 b,可以用“+”替代
在查询视图中 C-c C-c 退出。
我们做GTD,只需掌握以上内容即可。对于快捷键,不用强行记忆,边用边记才更有效。需要经常使用的一个技巧就是使用SPC ?
查看当前模式下的快捷键。