Org-mode 入门

大概翻译了http://orgmode.org/manual/index.html 但是还有一半没有完成 觉得暂时够用。

1 什么是 Org-mode

Org 是 emacs 中(现在也有独立的应用可以使用这种格式)的一个模式,用于通过纯文本格式快速高效的维护笔记、 TODO lists、和项目计划,他也是一个写作发布系统且支持嵌入程序源代码(当前这个博客正式通过 Org-mode 编写)。

<!– more –>

1.1 spacemacs 的快捷键调整比较大需要往这里看 Spacemacs Org-mode 快捷键

2 文档结构

2.1 概要和标题

2.2 标题(Headlines)

标题的格式如下

2.2.1 * 标题示例

  1. ** 标题
  2. ** 标题 2
    1. * 标题
      1. ** 标题
        1. * 标题
          1. ** 标题

3 标题操作

orgmode 支持标题折叠,通过 tab 键可以切换标题的状态,通过 S-TAB 和 C-u TAB 可以在全文范围进行概览-内容-显示所有之间进行切换。 而在一个标题上面使用 tab 键则可以在折叠-显示子节点-显示子树之间切换。

注意 1:在 org-footnote-section 后命名的标题作为脚标被特别对待,这样的标题的子树静默被导出函数忽略。 注意 2:在 spacsmacs 中,Org-mode 的模式下 Org-mode 的相关快捷键通常以 C-c 或, 作为前缀。

3.1 标题间移动

  • C-c C-n 下一个标题
  • C-c C-p 上一个标题
  • C-c C-f 下一个同级标题
  • C-c C-b 上一个同级标题
  • C-c C-u 返回到上级标题

3.2 结构编辑

  • M-RET 在当前级别插入新标题,如果光标在一个常规列表项,将会建立一个新表项
  • M-S-RET 在当前标题同级插入一个新的 TODO 条目(在 spacemacs 中这个快捷键应该是 C-c C-x M)
  • TAB 在新空条目 在合理级别范围内调整条目
  • M-left/right 升/降当前标题的等级
  • M-S-left/right 升/降当前标题树(包括所有子孙节点)的等级
  • M-S-up/down 上下移动标题树(在同级前后子树间切换)(spacemacs 中干掉了这个快捷键)
  • C-c C-w 转接条目或区域到其他位置,类似于剪切黏贴然后切换条目级别
  • C-x n s/w 局部编辑和取消当前子树

上述操作在选中模式下批量操作所有选中区域的标题

3.3 稀疏树

org-mode 一个非常重要的特性就是可以从概要树中抽取内容构建稀疏树,所以整个文档都被折叠了, 除了被抽取的内容和他的上级标题结构被展开显示(这个功能其实就是只展开满足筛选条件的内容,其他内容折叠) org-mode 包含了若干命令用于创建稀疏树,所有的命令都可以通过一个分发器(C-c /)访问 C-c / 提示输入一个按键选择稀疏树的创建方式,比如 C-c / r 提示输入一个正则表达式然后显示一个所有满足表达式的项的稀疏树 其他的稀疏树命令基于 TODO 关键字,标签或者属性,这些将在文档的后面讨论

4 常规列表

在概要树的条目中,手工格式列表可以提供更多的结构。它们提供了一个创建 checkbox 列表途径(section 5.6) Org 支持编辑这样的列表和 HTML 导出器(Chapter 12)解析格式化它们。

Org 中可以使用有序列表无序列表和描述列表

  • 无序列表使用'-'、'+'或者'*'作为条目符号
  • 有序列表则以'1.'或'1)'这样的符号开头
  • 描述列表使用'::'分隔术语和描述信息

列表中的所有条目必须拥有同样的缩进,一个条目在下一行有同样或更少缩进的时候该条目将会被结束。 一个列表在所有条目结束后关闭,或者在后面追加两个空行后关闭(M-RET 将不会集成这个级别的列表项前缀)

4.1 示例

4.1.1 指环王

我喜欢的几幕

  1. 洛汗之战
  2. Eowyn 大战巫王
    • 我很喜欢 Miranda Otto
      • 下一级条目
    • 这个是我在这本书里面最喜欢的一处
    • 这行用于测试换行。 这个是第二行
    • 后面又追加了一行

电影里面重要的演员

Elijah Wook
饰演 Frodo
Sean Astin
饰演 Frodo 的朋友 Sam

4.1.2 快捷键

下面的命令在条目的第一行执行将作用于该条目

  • TAB 条目可以像标题那样被折叠
  • M-RET 在当前级别插入新条目
  • M-S-RET 插入一个新的 checkbox (没有找到 spacemacs 中对应的命令或快捷键)
  • M-S-up/down 上下移动条目和相关子条目(切换相同缩进的前后条目)
  • M-left/right 减增条目的缩进
  • C-c C-c 如果当前在一个 checkbox 条目则切换它的状态
  • C-c - 循环切换列表条目的前导符号('-' '+' '*' '1.' '1)')

5 脚注

脚注被定义在一个有第 0 列(不允许有缩进)方括号括起来的脚注标记的段落里面, 脚注引用就是一个简单的放在方括号里面的脚注标记,它被放在文本间,例如:

5.1 下面是用于处理脚注的命令

命令 描述
C-c C-x f 脚注行为命令,如果光标在脚注上则跳转到定义,如果在定义上则跳转到第一个引用,否则在当前增加脚注,增加前缀参数(C-u 数字)则会有一个菜单提供其他行为
C-c C-c 在脚注定义和引用间跳转

5.2 示例

这个可以是文章的具体内容,这里1插入了脚注

6 表格

Org 携带了快速直观的表格编辑器。 类 Spreadsheet 的计算功能可以通过和 Emacs calc 插件结合来提供(参见 emacs Calculator 手册来获取更多细节)。 Org 使通过朴素 ASCII 字符来构建表格变得很容易,每个第一个非空白字符为'|'的行被视为表格的一部分。'|'也是列分隔符,所以一个表格看上去应该是 下面这个样子。

Name Phone Age
Peter 1234 17
Anna 4321 25

每次你在表格里面按 TAB 或者 RET 或者 C-c C-c 的时候他都会被重新对齐。TAB 同时也会把光标挪向下一个字段。如果是在表格的最后或者在水平分割线(|—+—+—|)上 则 TAB 会创建一个新行,表格的缩进由第一行决定,任何一个以'|-'开头的行被视为一个水平分隔符,将在下一次重新对齐表格时被扩展到整个表格的宽度,所以要创建上面的表格你只需要输入

Name Phone Age

然后按下 TAB 键对齐表格,之后就可以填充字段了,实际上更快的方法应该是输入

Name Phone Age 之后再输入 C-c RET

当在字段中输入内容的时候 Org 特殊处理 DEL,BS 和所有字符键,插入和删除会避免其他字段的移动(导致错位)。当你使用 TAB,S-TAB 或者 RET 进入新字段的时候字段会被自动置空

6.1 创建和转换

C-c | 把选中区域转换成表格,如果每行包含至少一个 TAB 字符,这个功能将假设这是一块用 tab 分割的块,如果每行包含一个逗号则认为是使用 CSV 分隔符分隔,如果都不是则这些航根据空白分割成各个字段 如果没有选中任何区域这个命令将创建一个空的 Org 表格,不过像|Name|Phone|Age C-c RET 这样会更容易一些

6.2 重新对齐表格和字段间移动

命令 描述
C-c C-c 不移动光标(到下一个字段),重新对齐表格
TAB 重新对齐并移动光标到下一个字段,如果需要的话会创建新行
S-TAB 重新对齐并向前一个字段移动光标
RET 重新对齐表格并向下一行移动,如果需要的话会创建新行

6.3 行列编辑

命令 描述
M-left/right 左右挪动当前列
M-up/down 上下挪动当前行
M-S-left 删除当前列
M-S-right 在光标左侧插入新列
M-S-up 删除当前行
M-S-down 在当前行上方插入新行,加入前缀参数则在下方插入
C-c - 在当前行插入水平分割线,加入前缀参数则在下方插入
C-c RET 在当前行的下一行插入水平分割线然后在这行的下一个插入新行
C-c ^ 在区域内对表格排序,当前所在列作为作用列,排序的范围是最近的两个水平分隔符之间,或者是整个表

7 超链接

就像 HTML 那样 Org 提供了链接到内部文件和外部文件、网络新闻、email 等的链接

7.1 链接格式

Org 将会识别类 URL 的纯文本,并在点的时候激活它。通常的链接格式如下所示

baidu

一旦在 buffer 里面的链接被完成(所有方括号都关闭)Org 将会改变他的显示,就是说

baidu

会被显示成baidu

http://www.baidu.com

会被显示成http://www.baidu.com/ 要编辑链接地址,可以在链接上使用命令 C-c C-l

7.2 内部链接

如果链接看上去不像 URL 那样,他就会被视为一个当前文件的内部链接,一个最重要的例子就是

#my-custom-id

它将会连接到一个 CUSTOMID 属性为 my-custom-id 的条目

7.2 或是 Find my target 这样的链接会导致一个在当前文本内部,对像 这样的相关目标进行搜索

??? 内部链接用于引用它们的目标,尽可能使用链接或者编号

7.3 外部链接

Org 支持连接到到文件、网站、网络新闻和电子邮件、BBDB 数据库条目和 IRC 回话系统以及他们的记录,外部链接是 类 URL 定位符,它们以一个短标识后跟一个分号开头,分号后面不能有空白符 下面是一些例子: http://www.keyboardancer.com/ jupiter.jpg /home/dominik/image/jupiter.jmp papers/last.pdf::NNN news:comp.emacs mailto:chenpengsmail@qq.com vm:folder#id wl:folder#id folder#id folder#id group#id /irc/com/#emacs/bob

一个链接应该被双重方括号括住,可以包含一个描述文本替代 URL 的显示 例如

GNU Emacs

如果描述内容是一个文件名或者是一个指向图片的 URL,HTML 导出的时候将会内嵌图片并作为一个可以点击的按钮,如果没有描述内容并且链接指向一个图片,这个图片将被内嵌到 HTML 导出文件

7.4 处理链接

Org 提供了使用正确语法创建链接并插入到文件中,和跳转到链接的方法。

命令 描述
C-c l 创建一个指向当前位置的链接,这个是一个全局命令(你必须自己创建一个键盘绑定)它可以在任何 buffer 中创建链接,这个链接为之后在 Org 中插入进行存储
C-c C-l 插入一个链接,提示向 buffer 插入一个链接,你可以直接输入一个链接或者通过上下键选择一个历史存储链接,之后会提示你输入这个链接的描述信息,当在一个已存在的链接上使用这个命令的时候将会编辑这个链接和描述信息
C-c C-o or mouse-1 mouse-2 打开链接
C-c & 跳转回到记录位置,位置被内部跳转命令和 C-c %记录,使用这个命令若干次会在记录位置的缓存环中向前移动

7.5 定位链接

文件链接可以包含一些附加信息可以使 Emacs 在跳转到链接时跳转到一个文件内部的特定位置。这些信息可以是一个跟在双冒号后的行号或者搜索选项。

以下是一些不同的附加到一个文件链接的搜索信息的语法,并附带说明。

8 使用 TODO 项

Org 模式不需要把 TODO 列表放到独立的文档,而是把 TODO 项作为笔记的一部分,这是因为 TODO 项一般是记笔记的时候产生的,在 Org 模式中可以简单的标记树中的任何条目为 TODO 项,这样信息不会重复,而且 TODO 项会保存在它的上下文中。 Org 模式提供了可以让你概览从多个文件中收集的所有你要做的事情的方法

8.1 使用 TODO 状态

每一个以 TODO 开头的条目都会成为一个 TODO 项,例如: * TODO Write letter to Sam Fortune

8.1.1 TODO Write letter to Sam Fortune

8.1.2 操作 TODO 条目的主要命令

命令 描述
C-c C-t 循环切换当前条目的 TODO 状态 (unmarked)->TODO->DONE->(unmarked),同样的切换可以被时间线缓冲区(timeline buffers)和日程表缓冲区(agenda buffers)通过 t 命令"远程"完成
S-rigth/left 切换到下一个/上一个 TODO 状态,和循环类似
C-c / t 在稀疏树中查看 TODO 项,折叠除了所有 TODO 项和它上级标题的整个缓冲区
C-c a t 显示全局 TODO 列表,从所有日程表文件中收集 TODO 项并在单一的缓冲区中显示。
S-M-RET 在当前 TODO 项下方插入新的 TODO 项

改变 TODO 条目的状态也会触发 标签(tag)发生变化,查看 org-todo-state-tags-triggers 的字符串文档(docstring)来了解详情

8.2 多状态工作流

你可以使用 TODO 关键字来指定一系列的工作进展状态: (setq org-todo-keywords '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))

竖线分隔了 TODO 关键字(有动作的状态)和 DONE 状态(不需要有进一步的状态了,这里指的不是状态名而是状态类型)。如果你没有提供这个分隔线,最后一个状态将被用作 DONE 这个状态(译注:不是状态的名字,而是状态的一个类型,如果要是有竖线分隔 "DONE" "DELEGATED" 这两个状态都是 DONE 类型的,这会触发一些相关的行为),在这种配置下 C-c C-t 命令将会在(TODO->FEEDBACK->VERIFY->DONE->DELEGATED)这个顺序切换 有时候你可能想并行的使用不同的 TODO 关键字集合,比如,你可能想拥有一个比较基础的 TODO/DONE 工作流,但是同时想有一个用于 BugFix 的工作流,那你的配置看上去应该是这样的:

(setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE") (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")))

关键字应该完全不同,这样有助于 Org 模式对给定条目的状态序列进行追踪。这个例子同样展示了如何为快速访问特定状态提供按键,你将会在 C-c C-t 命令后提示输入追加在关键字后面的括号里面的字母

在文件的任意位置使用下面的文本可以定义只在一个文件内部有效的 TODO 关键字。

在改变这些文本的任何一行后,使用 C-c C-c 使光标当前行在 Org 模式中生效。

8.3 TODO 进展日志

9 TODO 标签

10 属性

属性一个关联到条目的键值对,它们被放在一个被命名为 PROPERTIES 的清单中每个属性在单独一行中以开头的键名(被冒号括起来)和值被指定

#+BEGINSRC org

10.1 CD collection

10.1.1 Classic

  1. Goldberg Variations

    #+ENDSRC

    你可以通过设置属性 :XyzALL: 给一个特定的属性 :Xyz: 定义允许值,这种特殊的属性可以被继承,也就是说,如果你在一个级别为 1 的条目设置了它,它将作用于整个树。当设定了允许值之后,设置相关的属性将变得更容易,而且更不容易犯一些拼写错误,比如这个 CD collection 的例子,我们可以像下面这样预定发行商和碟片在盒子里的编号

    #+BEGINSRC org

10.2 CD collection

10.2.1 Classic

  1. Goldberg Variations

    #+ENDSRC

    命令 描述
    C-c C-x p 设置属性,提示输入属性名和值
    C-c C-c d 从当前条目移除属性

    基于属性构建稀疏树和特化列表,使用和标签搜索一样的命令,搜索语法在 标签和属性匹配节描述

11 TODO 日期和时间

Footnotes:

1

这个是脚注的具体内容

Last Updated 2017-06-22 四 15:13.
Emacs 24.5.1 (Org mode 9.0.9)