Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2011-04-03T22:06:15+08:00 ====== Emacs的Org Mode ====== [Org Mode] 1 介绍 2 基本用法 3 列表 4 注脚 5 表格 5.1 基本表格 5.2 spreadsheet 6 链接 7 todo list 8 导出成其他格式 9 请参考 org mode 的文档。 10 我自己的使用经验 ====== 1 介绍 ====== ~~~~~~~ **Org mode** 是 emacs 中的一个主模式。 Org 是 organization 的缩写。这个模式的主要作用是用来记笔记,写 todo list,org mode 有一个目标,就是希望每件事情都只记录一次。 Org mode 已经是 emacs 自带的组件,如果你想用最新的 org mode,可以在这里下载:[http://orgmode.org/] ===== 2 基本用法 ===== ~~~~~~~~~~~ 很简单,一级标题用一个星号(*)表示,二级标题用两个星号表示,三级标题用三个星号表示,以此类推,注意,**星号必须顶格写**。比如,新建一个文件,在 emacs 中打开,然后敲:__M-x org-mode__,进入 org mode。然后,在文件中写入下面的内容: * top level ** the second level *** the third level somethings to write 注意,**星号前不能有空格**。 然后你就可以看到这些各个等级的标题和内容被合适的高亮了。你可以自由的控制这些标题和内容是被折叠还是显示出来,方法就是使用__TAB__。比如,把光标移动到最开始的地方,连续按TAB, org mode 会把 buffer 中的内容按照 **全部折叠->展开所有标题->展开全部内容** 这样的顺序循环显示。另外,还有一些快捷键可以帮助你方便的在 org mode 中间移动: C-c C-n 移动到下一个标题 C-c C-p 移动到上一个标题 C-c C-f 移动到和当前标题同等级的下一个标题 C-c C-b 移动到和当前标题同等级的上一个标题 C-c C-u 向上移动到更高一层的标题 __Alt+左右方向键可以改变标题的级别__ ===== 3 列表 ===== ~~~~~~~ 在**同一个子标题**下,你还可以将内容划分的更细致。方法是使用这些符号: __‘-’, ‘+’, ‘*’, ‘1.’, ‘1)’__。注意,这里的’*'不能顶格写。 比如,在你的 org mode 的 buffer 中写入下面这些文字(从 org mode 手册上抄来的例子): My favorite scenes are (in this order) 1. The attack of the Rohirrim 2. Eowyn’s fight with the witch king * this was already my favorite scene in the book * I really like Miranda Otto. 3. Peter Jackson being shot by Legolas – on DVD only He makes a really funny face when it happens. But in the end, no individual scenes matter but the film as a whole. Important actors in this film are: – Elijah Wood :: He plays Frodo – Sean Austin :: He plays Sam, Frodo’s friend. I still remember him very well from his role as Mikey Walsh in the Goonies. 把光标移动到 ‘1.’ ‘2.’ 或 ‘3.’ 所在的行上,然后按__ shift 加左右方向键__,看看有什么效果。(将同一层次的列表符号循环变换) ===== 4 注脚 ===== ~~~~~~~ 在 org mode 中,你可以为你的文章添加注脚(footnote)。注脚的格式有两种,__一是方括号+数字,二是方括号+fn+名字__。比如下面有两个例子: 在 org mode 的正文中写下这两句话: The Org homepage__[1]__ now looks a lot better than it used to. The Org homepage__[fn:orghome]__ now looks a lot better than it used to. 接下俩你可以写一些其他东西,然后在**文章的末尾**写上下面两句话(注意:**必须要顶格写**): [1] The link is: http://orgmode.org [fn:orghome] The link is: http://orgmode.org 把光标移动到正文的[1]处,按__ C-c C-c__,可以跳转到注脚[1]处,在注脚[1]处按 C-c C-c,可以跳转到正文的[1]处。对于[2]也一样。 ===== 5 表格 ===== ~~~~~~~ ==== 5.1 基本表格 ==== ============= 在 org mode 中,你可以画表格。方法很简单,在某一行__顶格的位置输入’|'__,然后输入表格第一行第一列的内容,再输入’|',然后输入表格的的一行第二列的内容,以此类推。当第一行输入完成后,按 __TAB__, org mode 会把当前行对齐,然后为你创造出表格的下一行,让你继续输入。用 __TAB 和 S+TAB__可以在表格中正向或反向的移动。 比如下面的例子: | 1 | one | | 2 | two | | 3 | This is a long chunk of text | | 4 | four | 有时候,表格的某一项特别的长,你可以在任意一个表格的__空白项内输入数字来限制其所在列的长度__。比如: | | __<6>__ | | 1 | one | | 2 | two | | 3 | This=> | | 4 | four | 在上面的例子中,第二列的长度不会超过6,超过的部分会被隐藏起来。你可以把鼠标移动到’__This=>’__上面,会有浮动标签显示出该项的内容,或者输入’C-c `’可以编辑被隐藏的内容。如果你发现表格的某一项没有如你预期的那样被隐藏起来,你可以在表格中的任意位置按 ‘C-c C-c’。 我们还可以把表格弄的更好看一些。在表格的某两行之间加入__’|-’__,然后按__TAB__,可以作出下面的效果: | | <6> | |—+——–| | 1 | one | | 2 | two | | 3 | This=> | | 4 | four | ==== 5.2 spreadsheet ==== ================ 你可以在表格中增加计算的功能。比如你有这样一个表格:第一列和第二列是三角形两个直角边的长度,第三列是通过勾股定理计算出的斜边长度,或者是这样一张表格:前几列是你各个科目的考试成绩,最后一列是你的平均分,那么,org mode 可以自动为你完成计算。我们以计算勾股定理为例,创建一张表格: | a | b | | |—+—+—| | 3 | 4 | | | 6 | 8 | | | 1 | 2 | | 在第二行第三列中输入’=($1^2+$2^2)^0.5′。$1和$2表示第一列和第二列,在你自己的表格中,你会使用你希望的列数进行计算。 | a | b | | |—+—+———–| | 3 | 4 | 5. | | 6 | 8 | 10. | | 1 | 2 | 2.2360680 | #+TBLFM: $3=($1^2+$2^2)^0.5 有时候,你输入完成后,org mode不会自动帮你对所有项都计算一边,这时,你可以输入__’C-u C-c C-c’__强制org mode为整个表格进行计算。如果你不想让某一列都按照公式计算,只希望在某一特定项上进行计算,你可以这样输入:’:=($1^2+$2^2)^0.5′, 即在等号前再加一个冒号。 ===== 6 链接 ===== ~~~~~~~ 你可以在 org mode 中设置连接。比如链接到当前文档的某个位置,或者链接到一个外部文件。链接到当前文档的某个位置只需这样输入: :Linux:Utils:emacs:快捷键 description 是你希望链接到的内容,org mode 会通过字符串搜索的方式找到第一个与 description 匹配的地方作为链接的目标。要链接到一个外部文件,只需这样输入: [[file:/directory/filename]] 想要跳到链接处,可以使用快捷键’__C-c C-o__’,或者鼠标左键单击。对于到外部文件的链接,emacs 会试图将该文件打开。 ===== 7 todo list ===== ~~~~~~~~~~~~ Org mode 的一个很重要的功能就是写 todo list。 创建一个todo list 和创建一个 org mode 的其他标题并没有什么区别。比如你可以顶格写下这样一 行: * write org mode document 然后把光标移动到这行上,按__shift+左右方向键__,你会发现该条目会在 TODO和 DONE 之间切换: * TODO write org mode document * DONE write org mode document 这就是最简单的 todo list 了,想做什么,就在 org mode 下创建一个条目,并将其状态设置为 TODO,做完后将其状态设置为 DONE。 todo list **默认只有两种状态**: TODO 和 DONE。我们可以再增加一些其他状态。比如在.emacs中加入下面的语句: (setq org-todo-keywords '((sequence "TODO" "DOING" "HANGUP" "|" "DONE" "CANCEL"))) 可以将 todo list 的状态增加为五种:TODO,DOING,HANGUP,DONE,CANCEL。 注意,在 HANGUP 和 DONE 之间有一条竖线 “|”,在竖线之前的状态和之后的状态使用的是不同的face。 进一步的,我们还可以记录切换到某一种状态时的时间: (setq org-todo-keywords '((sequence "TODO(t)" "DOING(i!)" "HANGUP(h!)" "|" "DONE(d!)" "CANCEL(c!)"))) 在 DOING HANGUP DONE 和 CANCEL 后的括号中都有一个’!',这种写法表示**进入到这些状态后会记录下当前时间**。而每个状态后面的括号中都有一个字母,这个__字母就是进入该状态的快捷键__。当你想切换到某一状态时,可以输入’__C-c C-t__’(此时 emacs 会弹出一个提示窗口),__然后输入对应的快捷键__就可以把当前的条目设置为该状态。 主意,改变 org-todo-keywrods 之后,最好把你的 org mode 的文件关闭,然后在重新打开,否则可能会发现设置无效。 ===== 8 导出成其他格式 ===== ~~~~~~~~~~~~~~~~~ 已经编辑好的 org mode 文档可以导出为其他格式。 __C-c C-e a __导出为文本文件。 __C-c C-e h__ 导出为 HTML 文件。 ===== 9 请参考 org mode 的文档 ===== ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 实际上 org mode 提供的功能极其繁多。我在上面列出的只是我日常会用到的功能。 Org mode 还有很多我这篇文章中完全没有涉及的功能,而我涉及到的功能,也有许多细微的技巧没有提及。幸运的是, org mode 有一份极其详尽的文档。你可以在 emacs 中输入 __‘C-h i__’,然后搜索 ‘__org mode__’,找到该文档。想充分发挥出 org mode 的威力,需要仔细阅读这份文档。 ===== 10 我自己的使用经验 ===== ~~~~~~~~~~~~~~~~~~~~ ==== 1. 记 todo list。 ==== 把我工作中要做的事情和自己想学的东西都列出来,并且使用前面提到的功能记录下每件事情的起始时间和结束时间,即 DOING 和DONE 的时间,以此推算出这件事情究竟花费多少时间。我是搞 IT 行业的,经常会遇到任务完不成,需要加班的情况。我希望通过记录下我完成每件事情的时间,来得到一份第一手资料,用来推断以后遇到的工作所花费的时间。这样,无论是boss 给我安排任务,还是我给别人安排任务,都可以做到心中有数。 ==== 2. 记笔记。 ==== 工作中,领导有要求记工作笔记,把工作中遇到的问题和解决办法记录下来。平常在网上查到的资料,也可以随手建立一个条目,粘贴上去。 ==== 3. 写文档。 ==== 我个人认为 org mode 不适合写很长,很复杂,逻辑性很强的文档,那是tex 的范畴。不过相对简单的文档,比如工作报告,用 org mode 写,再生成文本文档,效果还是不错的。 实际上,本文基本涵盖了我所用到的 org mode 的功能。我曾经通读过 org mode 的文档。开始我读的很兴奋,因为看到了很多让我眼花缭乱的功能。但后来我就感到困惑了,因为那么多功能,如果我都用上的话,反而会把事情变得很繁琐。最后,我选择了一些最基本最简单的功能,用来辅助我的日常工作(也就是我本文中介绍到的功能)。但我总是想,那些我没用到的功能,也许只是我没有好的思路来使用而已。所以,如果有谁有好的 org mode 的使用思路,请一定要不吝赐教。 最后,我习惯让扩展名为.org的文件打开后默认进入 org mode,只需在.emacs 中加入:(emacs 23已默认可以,不需要加) (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))