org-mode, 是 Carsten Dominik 在 2003 年推出的一款文本标记语言, 其最早的作用是管理日常生活 ddl, 并进行简单的富文本编辑. 之所以在 emacs 之后讲, 是因为 emacs 在很早的版本就提供了对 org-mode 的支持, 当然还有一套完整的 emacs 风格的快捷键体系.
首先, markdown 是于 2004 年推出的第一个发行版, 历史上不如 org-mode 早; 其次, markdown 的扩展性极为有限, 而 emacs 的超强扩展性, 使得 org-mode 具有极其多样化的功能. 此外, org-mode 还可以进行计划的规划 ,让你化身时间管理大师.
只需要创建一个 *.org
的文件并使用 emacs 打开, 即可自动进入 org-mode; 另外, 你还可以通过 M-x <RET> org-mode <RET>
来对任意的 buffer 运行 org-mode.
和 markdown 一样, 其具备了 markdown 所有的功能, 但是其扩展性更胜一筹, 下面是一些常见的命令:
-
Commands :B_block:
=abc=
:abc
;+abc+
:abc/abc/
: abc ;*abc*
: abc (在通常情况下是加粗, 而 slides 中该效果不明显, 因此改为了彩色)\(E=mc^2\)
: (E=mc^2)当然还有行间公式
\[\]
:[\begin{aligned} \nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \ \nabla\cdot\vec{B} &=& 0 \ \nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \ \nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right) \end{aligned}]
用过 markdown 的同学们知道, markdown 中管理标题的等级是使用 #
来管理的, 而且最多只有 5 个. 对于一些极端的情况是不够用的.
在 org-mode 中, 使用的是 *
, 但是不限个数. 而且受限于编辑器, 层次管理是一个很大的问题. 而在 emacs 中, 存在大量的快捷键对不同的标题层次, 以一棵有根树的形式, 进行管理. 而且可以对不同的层次进行折叠, 例如不显示低于某一级别的标题, 便于观察文章结构.
例如, 使用 M-S-<left>/<right>
可以对整个子树中的所有标题升降一级, 而 C-c C-p/C-n
可以跳转到上一个/下一个标题, C-c C-f/C-n
可以跳转到相同等级的上一个/下一个标题.
org-mode 中, 可以加入不同类型的链接. 链接可以指向网页 url, 本地文件, 邮箱, org 文档中的一个元素, 等等. 通常的语法是 [[link][description]]
你可以像纯文本那样, 直接用 |
和回车创建一个表格, 又可以像在 M$ Excel 中那样, 使用 $
符号取出单元格中的值, 并进行简单的数学运算.
-
Example :B_block:
| Number | Price | Total | |--------+-------+---------| | 2 | 3.45 | =$1*$2 | | 4 | 4.34 | | | 5 | 3.44 | | | 5 | 5.6 | |
对于这样的一个表格, 只要输入
C-u C-c C-c
, 就会自动完成计算.
使用 #+begin_src #+end_src
即可插入一段代码块, 并且会自动加载你使用的对应语言的配置文件, 包括高亮, 缩进等, 当然比较简单的快捷键是 C-c C-, s
, 而在这样的环境中, 使用 C-c '
, 就会直接开启一个新的 buffer
, 你可以在这种语言的代码编辑环境中直接编写代码块.
-
Example :B_block:
#include<iostream> int main(){ std::cout<<"Hello, Org Mode"<<std::endl; return 0; }
另外, 还有 latex, quote, example 等环境, 使得 org-mode 可以支持很复杂的编辑命令.
org-mode 中, 可以用 C-c,C-t
来快速的插入一个时间, 默认的状态是 TODO
, 按 <tab>
可以切换到 DONE
的阶段. 由于 emacs 极强的扩展性, 你可以自定义任何想要的时间状态, 例如 WAITING,RUNNING
等等.
此外, emacs 还有多样化的快捷键, 帮助你管理这些事件. 例如集体改变状态, 找出所有的 TODO
, 跳到下一个 DONE
等等, 都有内置的或者自定义的快捷键来实现.
而且 emacs 可以自动监视编辑文本的总时间, 从而统计你做一项任务的实际时间. 配合 ``番茄钟'' 方法, 能极大的提高时间管理的效率.
写好的 org-mode 文件, 可以转化为 LaTeX,HTML,ODT 等不同的文件类型, 而其中最重要的就是 LaTeX, 在 org-mode, 你可以直接内嵌一段 LaTeX 代码, 例如引入 tikz
宏包来画图等等. 当然, 还可以内嵌 HTML, 让你的代码可以接受网站的 css 或 js 的渲染. 这个 slide, 就是通过 LaTeX 中的 beamer 模式导出的.
这个 repo 是一个为 org-mode 提供类似 md 中 [TOC]
功能的 elisp 代码.
如果仔细看, 我们发现文档是 README.org
而非 README.md
! 这说明, github 是支持以 .org
为扩展名的文档, 并且会对其做出正确的渲染.
谢谢大家!