下面是我学习Org的记录,为便于理解,添了不少废话。Emacs用的是Windows版,所以都按Windows说键盘习惯和Emacs配置文件(init.el,在HOME目录的.emacs.d子目录下;据说其他系统是.emacs)。
1 引子
看了不少Emacs和org-mode的学习笔记或教程,这些文章一般是先大赞org-mode一通,然后列出一堆lisp设置和快捷键。Emacs本来就被捧到天上去了,这下倒好,org-mode坐上了玉皇大帝的宝座,凡人靠近不得。所以我一直没学会使用org-mode,太神了,不敢碰。不过最近稍闲,不小心看了一些org-mode的文档,再稍仔细一看:什么神啊仙啊,浮云,都浮云。
Org只不过是一个工具,它的主要应用是:
- 做笔记
- 管理日程
- 作为文本标记语言
和其他所有工具一样,到底要不要使用,用哪个功能,这完全取决于个人的需求。别人吹得神乎其神的东西,对你来说它可能是多余的或者干脆就是垃圾。比如说,如果建议MS Office专家去用Org做笔记,他会觉得你很无聊;习惯用手机管理日程的人会觉得Org的日程管理纯属多余;HTML/XML高级用户可能会觉得Org作为一种标记语言使用实在太小儿科。
我很少做笔记,用文本标记语言的机会也很少,所以主要关心org的日程管理功能。学后有两个感想,一是Org功能虽强并不是神,二是学用Org其实也简单。学习方法是: 先看懂别人写的文本,然后模仿着写出类似的东西,有空再学一些快捷键改几个Emacs参数。
Emacs键盘命令的约定表示方法:
C
代表Ctrl
键M
代表Alt
键S
代表Shift
键- 以上三个按键单独按下没有意义,用 - 号表示它们搭配使用的按键
- 用空格连接的一系列符号表示顺序按下符号所代表的按键
- 其他符号:
LEFT/RIGHT/UP/DOWN
分别代表的左右上下方向键,TAB
即Tab
键,RET
代表Enter
键 - 例如:
C-x 表示同时按下Ctrl和x字符键 C-S-TAB 表示同时按下Ctrl, Shift和Tab键 M-x org-mode 表示先同时按下Alt和x字符键,再键盘输入org-mode字符串 C-x C-s 表示先同时按Ctrl和x字符键,然后同时按下Ctrl和s字符键 C-c C-e hh 表示先同时按Ctrl和c字符键,然后同时按下Ctrl和e字符键,最后键盘输入hh
2 看懂Org文档
婴儿学说话都是从模仿开始的,这个方法对所有学习应该都有效。学习org-mode不妨先看看别人写的东西。org-mode撰写的文档可以用任意文本编辑软件打开,最简单的org文档看起来是这样的:
* Introduction ** Summary Org is a mode for keeping notes, maintaining TODO lists, and doing project planning with a fast and effective plain-text system. .... ** Installation Org is part of recent distributions of GNU Emacs, so you normally don’t need to install it. If, for one reason or another ** ... * Document structure Org is based on Outline mode and provides flexible commands to edit the structure of the document. ** Outlines ...
这些文本只有两种元素:标题和普通段落。 以 *
符号开始的行表示该行为标题。
复杂一些的org文档可能看起来是下面这样的:
# -*- org -*- #+TITLE: org-mode 备忘录 #+AUTHOR: ZGUANG@LZU #+STARTUP: content #+STARTUP: indent #+TODO: TODO STARTED | DONE <<目录位置>> * 列表 + 选项1 + 选项2 * 表格 #+TBLNAME: 简单表格 | Name | Value | SD | |-------+--------+------| | T1 | 1.2 | 0.14 | |-------+--------+------| | T2 | 2.3 | 0.11 | * STARTED [80%] 超链接 ** 网址链接 [[www.gnu.org/software/emacs/][Download and install Emacs]] ** 文件链接 [[file:c:/windows/desktop.ini][桌面配置文件]] ** 内部链接 [[目录位置][返回目录]] ** TODO 其他链接 * 代码块 :@待续: #+BEGIN_SRC Emacs-lisp (setq-default tab-width 4) ;设置TAB宽度为4字符 #+END_SRC * TODO COMMENT 其他内容 被注释的标题所包含的所有内容在文件导出时不会被显示
这些是普通文本,内容比飞机场还平坦,英文称为plain-text,比中文名称直观。但是这么平坦的内容如果粘贴和保存为文本文件,用Emacs打开,情况就不一样了:不仅有颜色,还有超链接。再用 C-c C-e hh
命令转成HTML文档然后打开,那就更不一样了( 自己试试 )。
上面的文本包含了些什么?虽然没有囊括org-mode的全部物件,但至少展示了几个方面的东西:
- 以
#
号后加一空格开始的行表示注释,文件导出时这些内容不被导出,上面第一行就是。 - 以
#+
符号开始的行用于设置文档参数或内容属性,比如文档的标题、作者,org-mode打开时文档的呈现状态等。 - 用
[[]]
括起来的内容表示外部链接 - 用
<<>>
括起来的内容表示文档的内部链接 - 以
*
符号开始的行,表示该行为标题。 - 标题内容前的
TODO
标记是待办任务的标记符号。 - 标题行后面两个
:
符号间的内容表示标签(TAG
)。 - 标题行如果标题文本前有
COMMENT
标记表示该标题下的所有内容为注释。 - 位于
#+BEGIN_XXX
和#+END_XXX
之间的内容为特殊文档块,如代码块、例子、引用等。
虽然东西不少,但对某人来说不是所有的都要用到,所以建议用到了再去了解。
3 进入Org模式
安装Emacs的步骤就不说了,到这地步相信都有了一定的基础。直入正题吧:
- 打开后缀名为org的文件自动进入org-mode模式
- 在init.el配置文件中设置某类文件的编辑模式为org,如txt类文件:
(add-to-list 'auto-mode-alist '("\\.txt\\'" . org-mode))
- 用Emacs打开文件后使用主模式选择命令(
M-x org-mode
) - 任意文件名,如果文件的第一个非空行包含:
-*-org-*-
,用Emacs打开该文件后会自动使用org-mode模式。
后面这种方式对于使用Emacs编辑程序文件尤其方便,无需改变文件的后缀名。
4 标题和基于标题的编辑
4.1 设定标题
对于传统意义的标题,Org的设定非常简单:在行首加星号,星号与标题文字之间至少有一个空格,星号的数量表示标题的级别,方法简单明了。你不用为字体、行间距、缩进等设置而烦恼,专心做自己的事情。事实上标题是Org文档句法中唯一不需要通过上下文关系就能确定的内容:一行文本是不是标题只需要看行首字符。例如:
* 一级标题 ** 二级标题 *** 三级标题 正文内容 * 其他一级标题
然而,为使标题适应更广泛的应用(不仅仅是表明文档的结构层次),Org对其进行了较复杂的定义。它的完整语法为:
STARS KEYWORD PRIORITY TITLE TAGS
其中:
STARS
即星号,这是一个标题唯一必要的内容,其他(包括标题名称)都可以省略。KEYRORD
为TODO关键词,大小写敏感。PRIORITY
为优先级选项,为#号加一个字符并用方括号括起来,如[#A]
TITLE
即为实际的标题文本TAGS
为标签。
下面是一个完整标题的例子:
** TODO [#2] 优先级为2的待办事项 :@家庭作业:
虽然TODO关键词、优先级和标签属于标题的成分,但由于设定较复杂而且功能重要,有关内容将在后面介绍。
4.2 基于标题的文档编辑
Org基于标题的文档编辑方式允许用户在非常简洁的显示模式下对某个或多个标题下的所有内容进行复制、粘贴、移动等操作,相当方便,真正实现了标题在文档管理中的组织者作用。
4.2.1 术语约定
- 标题:仅指标题定义行
- 子标题:大标题下属的小标题
- 标题树:包括标题、子标题及其下属的所有文本
- 大纲:或文档轮廓,即全部标题,是一种显示模式
- 大纲折叠:隐藏子标题树
- 大纲展开:分级显示子标题树
4.2.2 在标题间移动光标
快捷键 | 动作 |
---|---|
C-c C-p/n |
移动到上/下一个标题 |
C-c C-b/f |