org-mode
Posted 灬鬼谷灬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了org-mode相关的知识,希望对你有一定的参考价值。
org-mode: 最好的文档编辑利器,没有之一
尽管按照org-mode 官方 的说法,Org 是一个基于快速高效的文本方式来实现做笔记、管理待办事项(TODO list)以及做项目计划的模式(Org is a mode for keeping notes, maintaining TODO lists, and doing project planning with a fast and effective plain-text system ),但 Org-mode 首先是最好的文档编辑利器,没有之一。
我之前用过很多年M$ Word, 也尝试过OpenOffice/LibreOffice Writer,以及iWorks Pager,但都不理想,写文档是没有痛快淋漓的感觉。直到后来发现了Omni Outliner , 才终于找到了写作的乐趣。 但是了解了org-mode之后,发现原来一切都是浮云。只有Org-mode才是终极的解决之道。 使用org-mode写文档的时候,你只需要关注内容本身,而不需要写上几个字,选中它们按Ctl-B,或者停下来用鼠标去点击“标题1”,更甚觉得那个标题格式不顺眼,开始去调整样式,而停下写作的思路。
BTW,Omni Outliner似乎也是从Org-mode找到的灵感,有图为证:
其功能与Org-mode 几乎一样,而且这货居然支持emacs快捷键!
尽管Omni Outliner以GUI的方式实现了org-mode的功能,但是并不是很理想:它的内容是“所见即所得”的,很多时候你难以更改其样式,而且只能在Mac OS下使用。 而Org-mode使用文本方式,具有如下优势:
- 格式通用,系统无关,软件无关
- 体积小,速度快
- “所想即所得”,比“所见即所得”更人性化
可以说,正是由于有了 Org-Mode, Emacs 处理文本的能力才得到了大幅度的提高,使得Emacs能够被非程序员接受。 如果说LaTex是排版的终极,那么Org-mode就是编辑的终极。Emacs 22 以后的版本已经集成了 org-mode,打开 .org 扩展的文件会自动进入 org 模式。此外,Vim下面也有了对应的Org-mode。
本文介绍最基本的编辑、格式化文本以及导出功能,后续再讨论高级玩法。
Table of Contents
1 用大纲组织内容
尽管Org-mode的功能不断丰富,现在已经可以记笔记,管理个人事务,制定项目计划以及很多其他的用途,但是最初和最基本的功能还是通过大纲(outline)的方式来编辑文档。 而且,无论是笔记管理,任务管理还是项目计划的编写,都是以对内容进行高效的组织(organization)为基础的。
在编辑文档,尤其是大型文档的时候,对内容的组织就显得尤为重要。经常需要在文档中快速定位,只关注某一部分的内容, Word之类的编辑器,通过文档结构图来定位文档位置,速度很慢,而且很多时候不能满足编辑的需要。尽管Word也提供了“大纲视图”,但是,唉……不说也罢, 如果那个功能真的好用,也就不需要Omni Outliner了。
Org-mode天然支持大纲视图,通过在文档中定义标题,可以方便的浏览每个小节,从而把握文档的总体内容。 Org是基于Outline模式的,它提供了更灵活的编辑结构文件的命令。比如折叠文档,针对大纲的编辑功能等,极其强大。
1.1 定义标题
要实现大纲,首先要定义标题。用emacs新建一个orgmode.org,输入如下内容:
* org-mode ** 大纲 正在编写大纲 ** 轻量级标记语言 * 可以导出其他格式 支持html,pdf等格式
注意:
- * 要位于每行的行首
- * 之后要有一个空格,然后再输入标题
- 连续几个*就表示是第几级大纲,最多支持10级。
此时看起来应该是这个样子:
org-mode
觉得没什么出奇的地方,只是改变了一些颜色?其真正的用处在于可以通过大纲操作文档,包括折叠,定位和编辑。而这些操作都通过快捷键实现,非常有效率。尤其是对大文档。
1.2 大纲相关的快捷键
1.2.1 折叠大纲
快捷键 | 命令 | 说明 |
---|---|---|
S-TAB | org-shifttab | 循环切换整个文档的大纲状态(三种状态:折叠,打开下一级,打开全部) |
TAB | org-cycle | 循环切换光标所在大纲的状态 |
1.2.2 在大纲之间移动
快捷键 | 命令 | 说明 |
---|---|---|
C-c C-n/p | 下/上一标题 | |
C-c C-f/b | 下/上一标题(仅限同级标题) | |
C-c C-u | 跳到上一级标题 | |
C-c C-j | 切换到大纲浏览状态 |
1.2.3 基于大纲的编辑
快捷键 | 命令 | 说明 |
---|---|---|
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 | 取消高亮 |
更多的快捷键可以通过C-c C-x C-h查看。
1.3 大纲的显示方式
默认的大纲显示没有缩进,显得有些乱。可以用 M-x org-indent-mode切换到另一种显示方式:
如果想让某个文件默认用这种方式打开,可以在文件头部增加:
#+STARTUP: indent
如果希望打开所有org文件都默认用这种方式,可以在.emacs中配置:
(setq org-startup-indented t)
2 超链接和图文混排
超链接也是组织内容的一种非常有效的方式。Org 支持多种超链接。对于符合要求的图片链接,可以形成图文混排。
2.1 创建链接
对于符合链接规则的内容,org-mode会自动将其视为链接,包括括文件、网页、邮箱、新闻组、BBDB 数据库项、IRC 会话和记录等。下面是一些例子:
http://www.astro.uva.nl/~dominik on the web file:/home/dominik/images/jupiter.jpg file, absolute path /home/dominik/images/jupiter.jpg same as above file:papers/last.pdf file, relative path file:projects.org another Org file docview:papers/last.pdf::NNN open file in doc-view mode at page NNN id:B7423F4D-2E8A-471B-8810-C40F074717E9 Link to heading by ID news:comp.emacs Usenet link mailto:adent@galaxy.net Mail link vm:folder VM folder link vm:folder#id VM message link wl:folder#id WANDERLUST message link mhe:folder#id MH-E message link rmail:folder#id RMAIL message link gnus:group#id Gnus article link bbdb:R.*Stallman BBDB link (with regexp) irc:/irc.com/#emacs/bob IRC link info:org:External%20links Info node link (with encoded space)
对于文件链接,可以用::后面增加定位符的方式链接到文件的特定位置。定位符可以是行号或搜索选项。如:
file:~/code/main.c::255 进入到 255 行 file:~/xx.org::My Target 找到目标‘<<My Target>>’ file:~/xx.org/::#my-custom-id 查找自定义 id 的项
除了上述的自动链接外,还可以显示指定链接,采用如下格式:
[[link][description]] [[link]]
显示指定的链接可以不显示原始的URL而是显示对该链接的描述。 这种方式可以用相对路径链接本地文件。
对于显示指定的链接,即可以手工输入,也可以用org-mode提供的快捷键进行编辑:
快捷键 | 命令 | 说明 |
---|---|---|
C-c l | 保存链接 | |
C-c C-l | org-insert-link | 创建或修改链接,可以引用已保存的链接 |
C-c C-o | org-open-at-point | 打开链接 |
C-c % | 记录内部链接地址 | |
C-c & | 跳转到已记录的内部链接 |
2.2 内部链接
前面的例子都是外部链接,Org-mode还支持内部链接:
定义锚点 #<<my-anchor>> [[my-anchor][内部链接]]
脚注可以看作是一种特殊的内部链接,但是要求具有"fn:"前缀:
添加脚注链接 [[fn:footprint1][脚注1]] 定义脚注 [fn:footprint1]
2.3 显示图片
尽管不看重"所见即所得",但有时候能够看到图文混排的内容还是很有必要的。通过iimage这个minor mode,可以在Org-mode中显示图片。
下载 iimage.el 文件扔到 Emacs 的目录里,然后在 .emacs 里添加下面的代码:
;; iimage mode (autoload 'iimage-mode "iimage" "Support Inline image minor mode." t) (autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)
然后就可以用命令
M-x iimage-mode RET
在当前模式里启动 iimage 这个 minor mode。
iimage-mode目前只能显示以文件方式链接的图片。
混排 超链接也是组织内容的一种非常有效的方式。Org 支持多种超链接。对于符合要求的图片链接,可以形成图文混排。
2.4 创建链接
对于符合链接规则的内容,org-mode会自动将其视为链接,包括括文件、网页、邮箱、新闻组、BBDB 数据库项、IRC 会话和记录等。下面是一些例子:
http://www.astro.uva.nl/~dominik on the web file:/home/dominik/images/jupiter.jpg file, absolute path /home/dominik/images/jupiter.jpg same as above file:papers/last.pdf file, relative path file:projects.org another Org file docview:papers/last.pdf::NNN open file in doc-view mode at page NNN id:B7423F4D-2E8A-471B-8810-C40F074717E9 Link to heading by ID news:comp.emacs Usenet link mailto:adent@galaxy.net Mail link vm:folder VM folder link vm:folder#id VM message link wl:folder#id WANDERLUST message link mhe:folder#id MH-E message link rmail:folder#id RMAIL message link gnus:group#id Gnus article link bbdb:R.*Stallman BBDB link (with regexp) irc:/irc.com/#emacs/bob IRC link info:org:External%20links Info node link (with encoded space)
对于文件链接,可以用::后面增加定位符的方式链接到文件的特定位置。定位符可以是行号或搜索选项。如:
file:~/code/main.c::255 进入到 255 行 file:~/xx.org::My Target 找到目标‘<<My Target>>’ file:~/xx.org/::#my-custom-id 查找自定义 id 的项
除了上述的自动链接外,还可以显示指定链接,采用如下格式:
[[link][description]] [[link]]
显示指定的链接可以不显示原始的URL而是显示对该链接的描述。 这种方式可以用相对路径链接本地文件。
对于显示指定的链接,即可以手工输入,也可以用org-mode提供的快捷键进行编辑:
快捷键 | 命令 | 说明 |
---|---|---|
C-c l | 保存链接 | |
C-c C-l | org-insert-link | 创建或修改链接,可以引用已保存的链接 |
C-c C-o | org-open-at-point | 打开链接 |
C-c % | 记录内部链接地址 | |
C-c & | 跳转到已记录的内部链接 |
2.5 内部链接
前面的例子都是外部链接,Org-mode还支持内部链接:
定义锚点 #<<my-anchor>> [[my-anchor][内部链接]]
脚注可以看作是一种特殊的内部链接,但是要求具有"fn:"前缀:
添加脚注链接 [[fn:footprint1][脚注1]] 定义脚注 [fn:footprint1]
2.6 显示图片
尽管不看重"所见即所得",但有时候能够看到图文混排的内容还是很有必要的。通过iimage这个minor mode,可以在Org-mode中显示图片。
下载 iimage.el 文件扔到 Emacs 的目录里,然后在 .emacs 里添加下面的代码:
;; iimage mode (autoload 'iimage-mode "iimage" "Support Inline image minor mode." t) (autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)
然后就可以用命令
M-x iimage-mode RET
在当前模式里启动 iimage 这个 minor mode。
iimage-mode目前只能显示以文件方式链接的图片。
3 轻量级标记语言
前面的大纲和超链接都是使用标记来定义的。实际上,Org现在已经成为一种专门的轻量级标记语言,与Markdown、reStructedText、Textile、RDoc、MediaWiki等并列。
相对于重量级标记语言(如html, xml),轻量级标记语言的语法简单,书写容易。即使不经过渲染,也可以很容易阅读。用途越来越广泛。 比如,gitHub的README文档除了支持纯文本外,还支持丰富的轻量级标记语言,其中就包括Org。
关于这些语言的对比,可以参考这里 。下面来看一下Org还支持哪些标记。
3.1 字体
*粗体* /斜体/ +删除线+ _下划线_ 下标: H_2 O 上标: E=mc^2 等宽字: =git= 或者 ~git~
3.2 表格
Org 能够很容易地处理 ASCII 文本表格。任何以‘|’为首个非空字符的行都会被认为是表格的一部分。’|‘也是列分隔符。一个表格是下面的样子:
| Name | Pone | Age | |-------+------+-----| | Peter | 1234 | 17 | | Anna | 4321 | 25 |
你可能认为要录入这样的表格很繁琐,实际上你只需要输入表头“|Name|Pone|Age”之后,按C-c RET,就可以生成整个表格的结构。类似的快捷键还有很多:
3.2.1 创建和转换表格
快捷键 | 命令 | 说明 |
---|---|---|
C-c 竖线 | 创建或转换成表格 |
3.2.2 调整和区域移动
快捷键 | 命令 | 说明 |
---|---|---|
C-c C-c | 调整表格,不移动光标 | |
TAB | 移动到下一区域,必要时新建一行 | |
S-TAB | 移动到上一区域 | |
RET | 移动到下一行,必要时新建一行 |
3.2.3 编辑行和列
快捷键 | 命令 | 说明 |
---|---|---|
M-LEFT/RIGHT | 移动列 | |
M-UP/DOWN | 移动行 | |
M-S-LEFT/RIGHT | 删除/插入列 | |
M-S-UP/DOWN | 删除/插入行 | |
C-c - | 添加水平分割线 | |
C-c RET | 添加水平分割线并跳到下一行 | |
C-c ^ | org-mode |