Table of Contents
org-mode简单介绍
按照官方的说法,Org is a mode for keeping notes, maintaining TODO lists, and doing project planning with a fast and effective plain-text system,就是说,它可以用来做笔记,管理待办事项,以及做项目计划。当然,作为outline-mode的派生模式,而outline-mode又作为text-mode的派生模式,Org-mode首先是一种基于文档编辑的模式,而本文将介绍它强大的文档编辑能力。
大纲
作为outline-mode的派生模式,Org-mode天然支持大纲视图,以大纲的模式去管理文件内容。
层次
在多少层就用多少颗*,需要注意的是*要顶格,而且与标题内容之间用空格分开。如:
* 第一层1 ** 第二层11 *** 第三层111 * 第一层2
操作
为了能尽快地使用org,这里只介绍最基本的操作,包括后面的功能也都是介绍最基本的(当然也是因为我本人就是个初学者)。
- 使用M-Ret来插入一个同层次的标题
- 折叠/显示,最少你应该知道可以用Tab来切换当前大纲的状态,或者你还可以知道用S-Tab来切换整个文档的大纲状态。
- 所有移动都有一个前缀操作C-c,emacs默认操作中的字符间移动对应同层标题移动,行间移动对应标题移动,同时你还应该知道用C-u来返回上一层标题。
列表
作为补充,在同一个子标题下,你可以用"1."来将内容划分的更加详细,将光标移动到"1."上,用Shift加方向左右键可以切换标识符号。
链接
对一些符合链接规则的内容,org为自动将其视为链接,包括文件、网页、邮箱等多种链接,为了方便,本文将注脚也看成是一种链接。
注脚
从小就喜闻乐见的一种方式是这样:
[1]
还可以这样:
[fn:name]
定义了注脚之后可以用C-c C-c在正文位置和注脚位置之间切换,而当注脚还没有定义时,还可以用它来定义。
内部
可以用下面方式来定义一个内部链接:
[[link][description]]
内部链接的跳转方式类似C-s。
外部
外部链接通常不用固定格式来定义,直接按相应链接的形式即可。比如:
http://www.google.com.hk file:/path/to/filename
最后,无论是内部还是外部的链接,都可以用”C-c C-o“或者单击鼠标左键来到达链接位置。
表格
貌似很多emacs操作视频里都有操作表格的部分,应该说这个功能确实是蛮炫的。
创建
- 你可以通过C-c |的命令来新建一个表格,需要注意的是,当它提示你建立多大的表格时,中间的字符是字母x而不是数学的乘号。
- 以|开头(行首),各列项间用|隔开,第一行输完后一个Tab,你就什么都明白了。这种方法创建的表格没有水平分割线,你可以同过C-c -命令来添加。
移动和调整
- 使用Tab移动一个区域或用Ret来移动一整行,在表尾执行该操作会新建一行。
- 如果某项内容较多,你可以在空白项内输入<数字>来限制其所在列的长度,超出长度的内容会被隐藏,你可以把鼠标移到该项来查看被隐藏内容。
- 在表格任意位置使用C-c C-c来对齐表格
speedsheet
表格往往会和一些计算联系在一起,比如一个班级的成绩单往往要在某列输入总分平均分之类的,就像下面这个表,要在第3列输入前两列的平均数。
| a | b | avg | |----+----+-----| | 83 | 73 | | | 66 | 77 | | | 77 | 99 | |
那么在第二行的第三列输入=($1+$2)/2,然后按下C-u C-c C-c。
| a | b | avg | |----+----+------| | 83 | 73 | 78 | | 66 | 77 | 71.5 | | 77 | 99 | 88 | #+TBLFM: $3=($1+$2)/2
如果只要对某一行求平均数,在=前加:即可。
标签
当内容较为复杂时,用大纲(即树状分类)的模式来进行管理往往会比较麻烦,这个时候就往往要用到标签。标签的使用不用大纲那么严肃而呆板,应该说它是一种比较自由而活泼的管理信息的方式。比如说唐僧,以大纲的的方式来管理归类的话,可以定义以下几层标题:
* 中国 ** 和尚 *** 唐僧
以下就以唐僧为例来说明标签的使用。
定义
- 如果说大纲里的标题是一个名字(并不一定是人)的话,那么标签就是这个东西某一方面一个显著的特点,就像一个东西有好多特点一样,一个标题可以拥有多个标签。比如说,我们可以给中国加上两个标签(以:开头和结束,标签之间以:隔开,M-Tab用来对齐)。
* 中国 :帅气:勤劳: ** 和尚 *** 唐僧
- 除了手动输入外,也可以在标题上用C-c C-c来定义。
- 在Org-mode里,子标题自动继承父标题的标签。比如这样:
* 中国 :帅气:勤劳: ** 和尚 :光头: *** 唐僧 :废话多:
那么唐僧就拥有帅气,勤劳,光头,废话多4个标签。
预定义
- 在文件头部定义,就像这样:
#+TAGS: { 命令行(c) 图形(g) } 编辑(e)
其中#+顶格,括号内字母代表快捷键,花括号为标签组,只能选一个。
- 在配置文件中定义,就像这样:
(setq org-tag-alist '((:group1 . nil) ("命令行" . ?c) ("图形" . ?g) ("编辑" . ?e)))
使用
建立了标签当然不是为了好玩,而是为了更方便地管理文档内容,可以用C-c \来查找具有某个标签的所有标题。或许有人认为直接找标题会更方便,比如说直接找唐僧,但事实上很多时候你只知道你要找一个帅气,勤劳,光头,废话多的东西,可以是并不知道唐僧是这样的,这种情况下标签的作用就很明显了。
元数据
其实之前已经看到过了,还记得表格的speedsheet么,输入计算表达式后在表格后面会出现#+TBLFM: $3=($1+$2)/2,这个就是元数据。
文档元数据
一般放在文档开头部分,比如本文使用的:
#+title: org-mode(文档编辑) #+author: hookbrother #+email: hookbrother@gmail.com #+date: <2013-08-27>
内容元数据
主要用于一些特殊格式的内容。
- 代码(如果没有高亮显示,请安装htmlize插件)
#+begin_src c :eval no-export ;;导出时不执行 #include <stdio.h> void main(){ printf("hello!"); return; } #+end_src
- 例子(单行的以:开头)
#+begin_example 多行的 例子 #+end_example
导出
当文档编辑完之后,你可以根据需要使用C-c C-e命令导成其他格式。需要注意的是,如果遇到can't find libary org提示,试试:
sudo apt-get install emacs24-el
发布
因为目前为止还没有在github上发表博客的打算,所以这里我用的是open source的插件,可以到这里下载