org-mode我用了两年,却未曾深入。 最近两周静下心来,仔仔细细的钻研了一番,深深被这厮震撼到了,作为文档编辑工作,在我的认知范围里,无出其右。 归纳整理于此,以作留存,馈与日后。
<!– more –>
1 文档结构
1.1 标题
Org 是在大纲模式之上实现的。 大纲模式可以让我们用层次结构来组织文档,这(至少对我来说)是笔记和想法的最好实现方式。 这种结构可以折叠(隐藏)文档的一部分而只显示文档的大概结构或者只显示我们正在处理的部分。 Org 大大简化了大纲模式的使用,它把大纲模式的整个显示/隐藏功能整合到了一个命令中:org-cycle,这个命令绑定到了TAB键上。
标题定义了大纲树的结构,以处于一行左边缘的一个或多个星号开头,如下:
* Top level headline ** Second level *** 3rd level some text ** 3rd level more text , Another top level headline
1.1.1 视图命令
Key | Desc | Command |
---|---|---|
TAB |
子树循环,在下列状态之间转换当前子树: _,->folded->children->subtree–._ | org-cycle |
S-TAB |
全局循环, 在下列状态之间转换当前的整个buffer: _,->overview->contents->show all–._ | org-global-cycle |
C-c C-r |
显示当前位置的上下文,展示当前条目,紧跟的标题和标题的层次结构。 适用于通过稀疏树命令或议程命令展露出来的位置附近工作。 | org-reveal |
C-c C-k |
展开子树的所有标题,CONTENT视图只有一个子树。 | outline-show-branches |
C-c TAB |
展开子树的所有直接子节点。 | outline-show-children |
C-c C-x b |
在间接缓冲区中显示当前子树 | org-tree-to-indirect-buffer |
C-c C-x v |
将区域中的可见文字复制到 kill ring. | org-copy-visible |
org-mode默认的视图模式是'OVERVIEW',即概览模式,只有顶层的标题可见。
你可以通过配置变量 org-startup-folded
来改变视图模式,如下:
1 | (setq org-startup-folded 'content) |
当然你也可以为每个文件指定视图模式,只要在文件buffer中任意位置包含以下语句(推荐配置在文件头):
#+STARTUP: overview #+STARTUP: content #+STARTUP: showall #+STARTUP: showeverything
更进一步,任何条目都包含 VISIBILITY
属性,此属性定义了条目的视图模式,覆盖一般性设置。可接受的值为: folded children content all, 示例如下
#+STARTUP: overview * A :PROPERTIES: :VISIBILITY: all :END:
1.1.2 跳转命令
Key | Desc | Command |
---|---|---|
C-c C-n |
跳转到下一个标题 | org-next-visible-heading |
C-c C-p |
跳转到上一个标题 | org-previous-visible-heading |
C-c C-f |
跳转到下一个同级标题 | org-forward-same-level |
C-c C-b |
跳转到上一个同级标题 | org-backward-same-level |
C-c C-u |
跳回更高一级的标题 | outline-up-heading |
C-c C-j |
跳转到别处,不改变当前的视图模式,创建一个临时buffer来展示当前文档 | org-goto |
在 C-c C-j
触发的临时buffer中,可用的命令如下:
TAB Cycle visibility. down/up Next/previous visible headline. RET Select this location. / Do a Sparse-tree search
若是关闭了 org-goto-auto-isearch
,以下命令可用:
n/p Next/previous visible headline. f/b Next/previous headline same level. u One level up. 0-9 数字参数 q 退出
1.1.3 编辑命令
Key | Desc | Command |
---|---|---|
M-RET |
插入一个同级标题在当前位置(行首,把当前行转成标题;行中,截断余下文本,在下一行生成标题) | org-insert-heading |
M-S-RET |
在M-RET的基础上,添加了 TODO 标示 |
org-insert-todo-heading |
C-RET |
在当前子树的结束位置插入同级标题 | org-insert-heading-respect-content |
C-S-RET |
在CRET的基础上,添加了 TODO 标示 |
org-insert-todo-heading-respect-content |
TAB |
用于还未输入文本信息的标题,第一个TAB变为之前标题的子标题,第二个TAB变为父标题,第三个TAB恢复原有等级 (,->children->parent->initial)) | org-cycle |
M-left |
当前标题提升一个等级 | org-do-promote |
M-right |
当前标题降低一个等级 | org-do-demote |
M-S-left |
当前整个子树提升一个等级 | org-promote-subtree |
M-S-right |
当前整个子树降低一个等级 | org-demote-subtree |
M-up |
当前整个子树和前面同级子树交换位置 | org-move-subtree-up |
M-down |
当前整个子树和后面同级子树交换位置 | org-move-subtree-down |
M-h |
Mark the element at point. | org-mark-element |
C-c @ |
Mark the subtree at point. 目前看起来是可视化选中当前子树 | org-mark-subtree |
C-c C-x C-w |
剪切子树到 kill ring | org-cut-subtree |
C-c C-x M-w |
拷贝子树到 kill ring | org-copy-subtree |
C-c C-x C-y |
从 kill ring 中粘贴子树 | org-paste-subtree |
C-y |
Depending on the options org-yank-adjusted-subtrees and org-yank- folded-subtrees, Org’s internal yank command will paste subtrees folded and in a clever way, using the same command as C-c C-x C-y. | org-yank |
C-c C-x c |
Clone a subtree by making a number of sibling copies of it. You will be prompted for the number of copies to make, and you can also specify if any timestamps in the entry should be shifted. | org-clone-subtree-with-time-shift |
C-c C-w |
将条目或区域 refile 到不同的位置。 | org-refile |
C-c ^ |
排序相同级别的条目。 | org-sort |
C-x n s |
将缓冲区缩小到当前子树。 | org-narrow-to-subtree |
C-x n b |
将缓冲区缩小到当前 block 。 | org-narrow-to-block |
C-x n w |
加宽缓冲区以消除变窄。 | widen |
C-c * |
使正常的文本行变为标题,重复操作可恢复成原样 | org-toggle-heading |
1.1.4 稀疏树
一个很重要的特性就是org有能力为被选中的信息构造出稀疏树,使得被选中信息突出显示,无关信息折叠显示。实践才是检测真理的唯一标准,试一试就知道具体是怎样优化你的工作了。
Key | Desc | Command |
---|---|---|
C-c / |
本命令会触发sparse-tress命令界面,提示输入字符,来选择创建稀疏树的命令 | org-sparse-tree |
C-c / r |
创建出和正则表达式匹配的稀疏树;标题匹配,标题可见; body匹配, 标题和body都可见;所以匹配高亮,当当前buffer通过编辑命令发送改变时,高亮消失,当然你可以通过 C-c C-c 主动取消高亮。 |
org-occur |
M-g n |
跳转到下一个匹配 | next-error |
M-g p |
跳转到上一个匹配 | previous-error |
很有可能需要频繁创建特定搜索条件的稀疏树,可通过 org-agenda-custom-commands
来定义快速访问的快捷键(这个命令可用在agenda dispatcher中)。
如下:
1 | ;; the key C-c a f as a shortcut for creating a sparse tree matching the string ‘FIXME’. |
The other sparse tree commands select headings based on TODO keywords, tags, or properties and will be discussed later in this manual. To print a sparse tree, you can use the Emacs command
ps-print-buffer-with-faces
which does not print invisible parts of the document. Or you can useC-c
C-e
C-v
to export only the visible part of the document and print the resulting file.
1.2 列表
Within an entry of the outline tree, hand-formatted lists can provide additional structure. They also provide a way to create lists of checkboxes. Org supports editing such lists, and every exporter can parse and format them.
在大纲树的组织结构中,自定义格式的列表可以提供更多的组织结构。使我们得到一个复先框列表。 Org
可以处理这种列表,同时各个 exporter
可以解析和格式化。
Org 可识别 ordered 列表, unordered 列表, 和 description 列表。
- Unordered 的列表项以 ‘-’, ‘+’ 或 ‘*’ 开始。
- Ordered 的列表项以数字加在 ‘.’ 或 ‘)’ 开始。格式如下:‘1.’ 或 ‘1)’。 可自定义起始值,在文本开始出插入[@20],代表以20开始。
- Description 列表项其实就是 unordered 列表项, 只在文本中间插入了分隔符 ‘::’ 。
同一个列表中项首行必须缩进一致。特别是 ordered 列表到了 ‘10.’ ,两位数字必须和其他数字左对齐。 若是下一行的缩进小于等于当前列表的缩进,则当前项终结。当所有项都终结,或者后面隔了两个空行时,列表终结。示例如下:
** Lord of the Rings 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. Important actors in this film are: - Elijah Wood :: He plays Frodo - Sean Austin :: He plays Sam, Frodo's friend.
Org supports these lists by tuning filling and wrapping commands to deal with them correctly, and by exporting them properly. Since indentation is what governs the structure of these lists, many structural constructs like
#+BEGIN_...
blocks can be indented to signal that they belong to a particular item.If you find that using a different bullet for a sub-list (than that used for the current list-level) improves readability, customize the variable
org-list-demote-modify-bullet
. To get a greater difference of indentation between items and their sub-items,customize org-list-indent-offset
.The following commands act on items when the cursor is in the first line of an item (the line with the bullet or number). Some of them imply the application of automatic rules to keep list structure intact. If some of these actions get in your way, configure
org-list-automatic-rules
to disable them individually.
当光标位于一项的首行时(带有项标志符的行),下面命令将作用于该项:
Key | Desc | Command |
---|---|---|
TAB |
列表项像标题一样的被折叠,展开 | org-cycle |
TAB |
用于还未输入文本信息的子项,第一个TAB变为子项,第二个TAB变为父项,第三个TAB恢复原有等级 (,->children->parent->initial)) | org-cycle |
M-RET |
插入一个同级项(行首,把当前行转成列表项;行中,截断余下文本,在下一行生成列表项) | org-insert-heading |
M-S-RET |
插入一个带 checkbox 的同级项(行为类似于M-RET) |
|
S-up/S-down |
跳转到当前列表的上一项或者下一项 | |
M-up/M-down |
和上一项或者下一项交换位置(同级之间) | |
M-left/M-right |
提升或者降低一项的等级,子项不变 | |
M-S-left/M-S-right |
提升或者降低一项的等级,子项同等变化 | |
C-c C-c |
当前项有 checkbox , 触发状态转换 |
|
C-c - |
循环改变将当前列表的项标志符 | |
C-c * |
使列表项变为标题 (在当前位置生成子标题). | org-toggle-heading |
C-c C-* |
使整个列表变成当前标题的子树 checkboxes 将变为 TODO 当未 unchecked 时 |
|
S-left/right |
循环改变将当前列表的项标志符 | |
C-c ^ |
Sort the plain list | org-sort |
1.3 Drawers
Sometimes you want to keep information associated with an entry, but you normally don’t want to see it. For this, Org mode has drawers. They can contain anything but a headline and another drawer.
You can interactively insert drawers at point by calling
org-insert-drawer
, which is bound toC-c
C-x
d
. With an active region, this command will put the region inside the drawer. With a prefix argument, this command callsorg-insert-property-drawer
and add a property drawer right below the current headline. Completion over drawer keywords is also possible usingM-TAB
.Visibility cycling on the headline will hide and show the entry, but keep the drawer collapsed to a single line. In order to look inside the drawer, you need to move the cursor to the drawer line and press
TAB
there. Org mode uses the PROPERTIES drawer for storing properties , and you can also arrange for state change notes and clock times to be stored in a drawer LOGBOOK. If you want to store a quick note in the LOGBOOK drawer, in a similar way to state changes, useC-c
C-z
Add a time-stamped note to the LOGBOOK drawer.You can select the name of the drawers which should be exported with
org-export-with-drawers
. In that case, drawer contents will appear in export output. Property drawers are not affected by this variable: configureorg-export-with-properties
instead.
Drawers 如下所示:
** This is a headline Still outside the drawer :DRAWERNAME: This is inside the drawer. :END: After the drawer.
1.4 块
Org mode uses begin…end blocks for various purposes from including source code examples to capturing time logging information. These blocks can be folded and unfolded by pressing
TAB
in the begin line. You can also get all blocks folded at startup by configuring the optionorg-hide-block-startup
or on a per-file basis by using#+STARTUP: hideblocks #+STARTUP: nohideblocks
1.5 脚注
A footnote is started by a footnote marker in square brackets in column 0, no indentation allowed. It ends at the next footnote definition, headline, or after two consecutive empty lines. The footnote reference is simply the marker in square brackets, inside text. Markers always start with fn:. For example:
The Org homepage[fn:1] now looks a lot better than it used to. ... [fn:1] The link is: http://orgmode.orgOrg mode extends the number-based syntax to named footnotes and optional inline definition. Here are the valid references:
[fn:name]
- A named footnote reference, where name is a unique label word, or, for simplicity of automatic creation, a number.
[fn::This is the inline definition of this footnote]
- A LATEX-like anonymous footnote where the definition is given directly at the reference point.
[fn:name:a definition]
- An inline definition of a footnote, which also specifies a name for the note. Since Org allows multiple references to the same note, you can then use \[fn:name\] to create additional references.
Footnote labels can be created automatically, or you can create names yourself. This is handled by the variable
org-footnote-auto-label
and its corresponding #+STARTUP keywords. See the docstring of that variable for details.
示例如下: The Org homepage1 now looks a lot better than it used to.
Key | Desc | Command |
---|---|---|
C-c C-x f |
当光标处于引用处时,跳转到它的定义;当光标处理定义处时,跳转到第一个引用处。其他情况下,新建一个脚注。当有前缀参数时,会提供一个菜单供选择操作,其中包括重新给脚注编号。 | org-footnote-action |
C-c C-c |
当光标处于引用处时,跳转到它的定义;当光标处理定义处时,跳转到第一个引用处。当有前缀参数时,行为和 C-c C-x f 一样,提供同样操作菜单。 |
|
C-c C-o |
脚注标签也是指向相应定义/引用的链接,您可以使用常用(链接)命令来跟踪这些链接。 | org-open-at-point |
C-c ='= |
在独立的窗口中,编辑引用关联的脚注定义。窗口可通过 C-c ='= 关闭 |
org-edit-special |
当 C-c C-x f
命令加上附加前缀参数时(C-u C-c C-x f
) ,一个操作菜单被提供:
s Sort the footnote definitions by reference sequence. During editing, Org makes no effort to sort footnote definitions into a particular sequence. If you want them sorted, use this command, which will also move entries according to org-footnote-section. Automatic sorting after each insertion/deletion can be configured using the option org-footnote-auto-adjust. r Renumber the simple fn:N footnotes. Automatic renumbering after each insertion/deletion can be configured using the option org-footnote-auto-adjust. S Short for first r, then s action. n Normalize the footnotes by collecting all definitions (including inline definitions) into a special section, and then numbering them in sequence. The references will then also be numbers. d Delete the footnote at point, and all definitions of and references to it.
1.6 The Orgstruct minor mode
If you like the intuitive way the Org mode structure editing and list formatting works, you might want to use these commands in other modes like Text mode or Mail mode as well. The minor mode orgstruct-mode makes this possible. Toggle the mode with
M-x
orgstruct-mode
RET
, or turn it on by default, for example in Message mode, with one of:
1
2 (add-hook 'message-mode-hook 'turn-on-orgstruct)
(add-hook 'message-mode-hook 'turn-on-orgstruct++)
1.7 Org 的语法
A reference document providing a formal description of Org’s syntax is available as a draft on Worg, written and maintained by Nicolas Goaziou. It defines Org’s core internal concepts such as headlines, sections, affiliated keywords, (greater) elements and objects. Each part of an Org file falls into one of the categories above.
To explore the abstract structure of an Org buffer, run this in a buffer:
M-: (org-element-parse-buffer) RETIt will output a list containing the bu↵er’s content represented as an abstract structure. The export engine relies on the information stored in this list. Most interactive commands (e.g., for structure editing) also rely on the syntactic meaning of the surrounding context.
You can check syntax in your documents using org-lint command.
2 表格
Org 提供了一个快速直观的表编辑器。 使用 Emacs 内嵌的 calc 的包可支持类似于制表软件的操作。
2.1 内置表编辑器
Org 能够很容易地格式化 ASCII 文本表格。 任何把'|'作为首个非空白字符的行都被视为表的一部分。 '|'也是列分隔符。 表如下所示:
名字 | 手机号 | 年龄 |
---|---|---|
brantou | 170xxxxxxxx | 18 |
在表格内键入 TAB
, RET
或 C-c
C-c
时,表格都会自动重新对齐。
TAB
也可以移动到下一个表格区域( RET
进入下一行),并在表的末尾或水平线之前创建新的表行。
表的缩进由第一行设置。 以"|-"开头的任何行都被视为水平分隔符行,并在下一个重新对齐时展开。所以,要创建上面的表,你只需要键入
| 名字 | 手机号 | 年龄 | |-
然后按 TAB
扩展表格。 更快的是键入 |名称|手机号|年龄 后, 再键入 C-c
RET
。
在表格区域中输入文本时,Org以特殊方式处理DEL,Backspace和所有字符键,以便插入和删除避免移动其他字段。
此外,当使用TAB,S-TAB或RET将光标移动到新的表格区域后会自动填充空格。
如果这种行为对您太不可预测,请配置选项 org-enable-table-editor
和 org-table-auto-blank-field
。
2.1.1 创建和转换
=C-c= =|= ~org-table-create-or-convert-from-region~
将活动区域转换为表。 如果每行包含至少一个TAB字符,则认为 TAB 是分隔符。 如果每一行都包含逗号,则逗号作为分隔(CSV)。 如果不是,则将行以空格为分隔符。
您可以使用前缀参数强制指定分隔符: C-u
强制CSV, C-u
C-u
强制TAB, C-u
C-u
C=u
将提示正则表达式匹配分隔符,数值参数N表示至少N个连续空格,或者 一个TAB将是分隔符。
如果没有活动区域,此命令将创建一个空的组织表。
2.1.2 调整和区域移动
Key | Description | Command |
---|---|---|
C-c C-c |
重新对齐表格,不移动到其他字段。 | org-table-align |
C-c SPC |
使用空格填充当前区域 | org-table-blank-field |
<TAB> |
重新对齐表格,移动到下一区域。 如有必要,创建一个新行。 | org-table-next-field |
S-TAB |
重新对齐,移动到上一区域。 | org-table-previous-field |
RET |
重新对齐表格并向下移动到下一行。 如有必要,创建一个新行。 | org-table-next-row |
M-a |
移动到当前表区域的开头,或移动到上一个区域。 | org-table-beginning-of-field |
M-e |
移动到当前表区域的结尾,或移动到上一个区域。 | org-table-end-of-field |
2.1.3 列和行编辑
Key | Description | Command |
---|---|---|
M-left \ M-right |
向左/向右移动当前列 | org-table-move-column-left\right |
M-S-left |
删除当前列 | org-table-delete-column |
M-S-right |
在光标位置的左侧插入一个新列 | org-table-insert-column |
M-up \ M-down |
向上/向下移动当前行 | org-table-move-row-up\down |
M-S-up |
删除当前行或水平分隔线 | org-table-kill-row |
M-S-down |
在当前行上方插入新行。 使用前缀参数,该行在当前行下创建 | org-table-insert-row |
C-c - |
在当前行下插入水平线。 使用前缀参数,在当前行之上创建 | org-table-insert-hline |
C-c RET |
在当前行下插入水平线,将光标移动到该线下面的行 | org-table-hline-and-move |
C-c ^ |
对区域中的表行进行排序 | org-table-sort-lines |
2.1.4 区域
Key | Description | Command |
---|---|---|
C-c C-x M-w |
将矩形区域从表复制到特殊剪贴板。 点和标记确定矩形的边缘字段。 如果没有活动区域,只复制当前字段。 该过程忽略水平分隔线。 | org-table-copy-region |
C-c C-x C-w |
将矩形区域从表格复制到特殊剪贴板,并将矩形中的所有字段都留空。 所以这是“剪切”操作。 | org-table-cut-region |
C-c C-x C-y |
将矩形区域粘贴到表中。 左上角在当前字段中结束。 所有涉及的字段将被覆盖。 如果矩形不适合当前表格,则根据需要放大表格。 该过程忽略水平分隔线。 | org-table-paste-rectangle |
M-RET |
在光标位置分割当前字段,并将其余部分移动到下面的行。 如果存在活动区域,并且点和标记都在同一列中,则列中的文本将包装为给定行数的最小宽度。 数字前缀参数可用于更改所需行的数量。 如果没有区域,但您指定了前缀参数,则将当前字段设置为空,并将内容追加到上面的字段。 | org-table-wrap-region |
2.1.5 计算
Key | Description | Command |
---|---|---|
C-c + |
将当前列中的数字或由活动区域定义的矩形中的数字相加。 结果显示在echo区域中,可以用C-y插入。 | org-table-sum |
S-RET |
当前字段为空时,从上面的第一个非空区域复制。 当不为空时,将当前区域复制到下一行,并将光标与其一起移动。 | org-table-copy-down |
2.1.6 杂项
Key | Description | Command |
---|---|---|
C-c ` |
在单独的窗口中编辑当前区域。 这对于不完全可见的区域很有用。当使用C-u前缀调用时,仅仅使整个字段可见,以便可以在当前位置编辑 。 当使用两个C-u前缀调用时,使编辑器窗口跟随光标在表移动,并始终显示光标所在区域。 当光标离开表时,或者当您用C-u C-u C-c`重复此命令时,跟随模式将自动退出。 | org-table-edit-field |
M-x org-table-import RET |
将文件作为表导入。 表格应该是TAB或空格分隔。 | org-table-import |
C-c \vert |
也可以通过将表格文本粘贴到 Org buffer,使用 C-x C-x 选择粘贴的文本,然后使用C-c | 命令(请参阅上面的创建和转换)。 |
org-table-create-or-convert-from-region |
M-x org-table-export RET |
导出表,默认情况下作为 TAB 分隔的文件。 用于与例如电子表格或数据库程序进行数据交换。 用于导出文件的格式可以在选项 org-table-export-default-format 中配置。 您还可以使用属性 TABLEEXPORTFILE 和 TABLEEXPORT_ FORMAT 来指定子树中的表导出的文件名和格式。 Org支持导出表格的相当一般格式。 |
org-table-export |
你可能因为‘|’开始的行,妨碍到你,而不喜欢自动表编辑器,你可以用下面的语句来关闭
(setq org-enable-table-editor nil) |
然后唯一的表命令 C-c
C-c
仍然工作, 做一个手动重新对齐。
2.2 列宽和对齐
列的宽度由表编辑器自动确定。 并且还可以从列中包含的数据类型(数字或者非数字)自动确定列的对齐方式。 有时一个区域或几个区域需要包含很多文本信息,会导致信息展示和编辑的诸多不便。 或者你想设定固定宽度的几列,而不管内容如何。 要设置列的宽度,列中任何位置的一个字段可能只包含字符串“N”,其中“N”是指定列的宽度(以字符为单位)的整数。 接下来重新对齐,然后将此列的宽度设置为此值。
<img src="/images/table-column-width.jpg" />
设定固定宽度后,长文本将会裁剪展示,多余部分用字符串 => 来替代展示。
要查看全文,请将鼠标悬停在该字段上—工具提示窗口(tool-tip window)将显示完整的内容。
要编辑这样一个区域,可使用 C-c
`
。 这将打开一个的新窗口。 编辑后用 C-c
C-c
来提交编辑内容,并关闭窗口。
当浏览包含有固定宽度表的文件时,必需的隐藏内容尚未发生,需要对齐表来隐藏内容,来变美观。
可设置 org-startup-align-all-tables
是浏览时对文件中的所有表进行重新调整,但这样会减慢文件打开的速度。
也可以在每个文件中设置此选项:
#+STARTUP: noalign #+STARTUP: align
如果不喜欢默认自动对齐的方式,您可以使用 <r> ,*<c>* 或者 <l> 来自定义对齐方式。 还可以将对齐和固定宽度组合使用,如下所示: <r10> 。 在导出文档时,将自动删除仅包含这些格式化信息的行。
2.3 列组
当Org导出表时,默认情况下不会有垂直线,因为在视觉上一般来说更令人满意。 然而,偶尔,垂直线对于将表结构化成一组列可能是有用的,就像水平线可以对于一组行所做的那样。 为了指定列组,您可以使用第一个字段仅包含"/"的特殊行。 其他字段可以包含'<'表示此列应该启动一个组,'>'表示组的结束,或'<>'('<'和'>'之间没有空格) 当前列自己一组。 导出后,列组之间的边界将用垂直线标记。 示例如下:
<img src="/images/table-column-groups.jpg" />
效果如下(好像没有效果):
N | N2 | N3 | N4 | sqrt(n) |
sqrt[4](N) |
---|---|---|---|---|---|
2 | 4 | 8 | 16 | 1.4142136 | 1.1892071 |
3 | 9 | 27 | 81 | 1.7320508 | 1.3160740 |
只插入列组启动器也是足够的:
<img src="/images/table-column-group-start.jpg" />
N | N2 | N3 | N4 | sqrt(n) |
sqrt[4](N) |
---|---|---|---|---|---|
2 | 4 | 8 | 16 | 1.4142136 | 1.1892071 |
3 | 9 | 27 | 81 | 1.7320508 | 1.3160740 |
2.4 The Orgtbl minor mode
If you like the intuitive way the Org table editor works, you might also want to use it in other modes like Text mode or Mail mode. The minor mode Orgtbl mode makes this possible. You can always toggle the mode with M-x orgtbl-mode RET. To turn it on by default, for example in Message mode, use
(add-hook 'message-mode-hook 'turn-on-orgtbl)Furthermore, with some special setup, it is possible to maintain tables in arbitrary syntax with Orgtbl mode. For example, it is possible to construct LATEX tables with the underlying ease and power of Orgtbl mode, including spreadsheet capabilities.
2.5 电子表格
2.6 Org-Plot
3 超链接
就如 HTML 一样, Org
提供文件内部链接,到其他文件,Usenet文章,电子邮件等外部链接。
3.1 链接格式
Org
能够识别类似URL链接的文本,并处理成可点击的链接。 通用链接格式如下所示:
[[link][description]] 或者 [[link]]
一旦链接完成,链接样式将发生变化,显示 description 而不是 [[link] [description]]
或 link 而不是 [ [link]]]
。
可以直接编辑链接的可见部分。 请注意,这可以是 link 部分(如果没有 description )或 description 部分。 要编辑不可见的“链接”部分,只需在链接上键入 C-c C-l
。
在链接的头和尾可删除链接不可见的边际括号,使得链接不完整,内部再次显示为纯文本。 插入缺失的括号将再次隐藏链接内部。
要显示所有链接的内部结构,可用菜单条目 Org->Hyperlinks->Literal links
。
3.2 内部链接
如果一个链接不是URL形式的,它被当做当前文件中的内部链接。
最重要的情况是像 [ [#my-custom-id]]
这样的链接,它将链接到 CUSTOMID 属性是 my-custom-id 的条目。 自己要负责确保这些自定义ID在文件中是唯一的。
诸如 [ [MyTarget]]
或 [[MyTarget] [Findmytarget]]
的链接会在当前文件的文本中搜索。
在链接上输入 C-c C-o
或 鼠标点击时,会跳转到链接匹配处。 自定义ID的链接将指向相应的标题。
文本链接的首选匹配是 dedicated target :双角括号中的相同字符串,如 ←← My Target→→ 。
如果没有 dedicated target ,链接将尝试匹配缓冲区内元素的精确名称。
使用 #+NAME
关键字进行命名,必须将其放在引用的元素之前的行中,如以下示例所示:
#+NAME: My Target | a | table | |----+------------| | of | four cells |
如果以上都没有成功,Org将搜索与链接文本完全相同的标题(也会搜索 TODO
关键字和标签)。
在导出过程中,内部链接被用于标记对象(并分配一个数字)。 标记的对象将被指向它们的链接引用。 特别地,没有 description 的链接将显示为分配给标记对象的编号。
以下摘录自 Org
缓冲区
- one item - <<target>> another item Here we refer to item [[target]].
导出时,最后一句将显示为 Here we refer to item 2 。
在非 Org
文件中,搜索将查找链接文本中的单词。 在上面的例子中搜索将是 my Target 。
链接后,将 mark 推到 Org
自己的 mark ring 上。 可使用 C-c &
返回到前一个位置。 直接连续使用这个命令多次可以回到前面记录的位置。
3.2.1 Radio targets
Org
可自动将正常文本中某些目标名称的任何出现转换为链接。 所以没有明确创建一个链接,文本就连接到 Radio targents 的位置。
Radio targets 由三角形括号括起来,
如 ←←← My Target→→→ 导致正常文本中的每个出现的 my target 被激活为链接。
仅当文件首次加载到Emacs中时,才会自动扫描 Radio targets 。
要在编辑过程中更新 Radio targets 列表,请在光标处于 Radio targets 位置时按 C-c C-c
。
3.3 外部链接
Org
支持链接到文件,网站,Usenet和电子邮件,BBDB数据库条目和链接到IRC对话及其日志。
外部链接是类似URL的 locators 。 它们以一个简短的识别字符串后面跟一个冒号开始。 冒号后没有空格。
下面列表显示每个链接类型的示例。
http://www.astro.uva.nl/~dominik on the web doi:10.1000/182 DOI for an electronic resource file:/home/dominik/images/jupiter.jpg file, absolute path /home/dominik/images/jupiter.jpg same as above file:papers/last.pdf file, relative path ./papers/last.pdf same as above file:/myself@some.where:papers/last.pdf file, path on remote machine /myself@some.where:papers/last.pdf same as above file:sometextfile::NNN file, jump to line number file:projects.org another Org file file:projects.org::some words text search in Org file file:projects.org::*task heading search in Org file docview:papers/last.pdf::NNN open in doc-view mode at page id:B7423F4D-2E8A-471B-8810-C40F074717E9 Link to heading by ID news:comp.emacs Usenet link mailto:adent@galaxy.net Mail link mhe:folder MH-E folder link mhe:folder#id MH-E message link rmail:folder RMAIL folder link rmail:folder#id RMAIL message link gnus:group Gnus group link gnus:group#id Gnus article link bbdb:R.*Stallman BBDB link (with regexp) irc:/irc.com/#emacs/bob IRC link info:org#External links Info node or index link shell:ls *.org A shell command elisp:org-agenda Interactive Elisp command elisp:(find-file-other-frame "Elisp.org") Elisp form to evaluate
链接应包含在双括号中,当然可能想要显示的描述性文本而不是URL(参见链接格式),例如:
[[http://www.gnu.org/software/emacs/][GNU Emacs]]
如果描述是文件名或指向图像的URL,则HTML导出将内嵌图像作为可点击按钮。 如果没有任何描述和链接指向图像,该图像将被内联到导出的HTML文件中。
Org
能识别出正常文本中的外部链接,并将其作为链接激活。
如果空格必须是链接的一部分(例如在 bbdb:[Richard Stallman]
中),
或者如果需要消除关于链接结尾的歧义,请将其括在方括号中。
3.4 处理链接
Org
为了正确的创建链接,插入链接和跟随链接,提供了很多快捷键。
Key | Description | Command |
---|---|---|
C-c l |
存储当前位置的链接。 这是一个全局命令,可以在任何缓冲区中使用它来创建链接。 链接将被存储以备将来插入 Org 的缓冲区。 创建什么样的链接取决于当前的缓冲区。 |
org-store-link |
C-c C-l |
插入链接。 将提示将链接插入缓冲区。 可以键入链接,使用内部链接的文本或上述示例中提到的链接类型前缀之一。 该链接将被插入到缓冲区,以及一个描述性的文本。 如果在调用此命令时选择了某些文本,则所选文本将成为默认描述。 | org-insert-link |
C-u C-c C-l |
当使用 C-u 前缀参数调用 C-c C-l 时,将插入文件链接,可以使用文件名来完成文件选择。当前用到是相对路径,若是想要绝对路径可用两个 C-u 前缀。 |
|
C-c C-l |
当光标在已有链接上时, C-c C-l 允许编辑链接的链接和描述部分。 |
|
C-c C-o |
打开当前位置的链接。如果要覆盖默认应用程序并使用Emacs访问文件,请使用 C-u 前缀。 如果要避免在Emacs中打开,请使用 C-u C-u 前缀。如果光标位于标题上,但不在链接上,则打开标题中所有链接。 |
org-open-at-point |
RET |
当 org-return-follow-link 设置时,RET也将跟随当前位置的链接。 |
|
C-c C-x C-v |
触发图片链接内联显示。当用前缀参数调用时,还会显示具有描述信息的图片链接。 可以通过配置变量 org-startup-with-inline-images 使内联图片在启动时显示。 |
org-toggle-inline-images |
C-c % |
Push the current position onto the mark ring, to be able to return easily. Commands following an internal link do this automatically. | org-mark-ring-push |
C-c & |
跳回到记录位置。 A position is recorded by the commands following internal links, and by C-c %. Using this command several times in direct succession moves through a ring of previously recorded positions. | org-mark-ring-goto |
C-c C-x C-n/p |
向前/向后移动到缓冲区中的下一个链接。 | org-next/previous-link |
3.5 在Org之外使用链接
可以插入和跟踪具有Org语法的链接,不仅在组织中,而且可以在任何Emacs缓冲区中。 为此,应该创建两个全局命令,如下:
1 | (global-set-key "\C-c L" 'org-insert-link-global) |
3.6 链接缩写
长的URL输入起来会很麻烦,同时在文档中类似的链接可能会很频繁的出现。 为此,你可能需要使用链接缩写。 链接缩写看起来如下所示:
[[linkword:tag][description]]
tag 是可选的, linkword 必须是一个单词,以字母开头,后跟字母,数字,' - '和''。
根据将链接缩写词与替换文本相关联的变量 org-link-abbrev-alist
中的信息来解析缩写。 定义如下所示:
1 | (setq org-link-abbrev-alist |
如果替换文本包含字符串 %s
,它将被标签所替换。
使用 %h
而不是 %s
,是因为需要对标签进行url编码(参见上面示例,需要对URL参数进行编码)。
使用 %(my-function)
将标签传递给自定义函数 ,并将其替换为生成的字符串。
如果替换文本不包含任何说明符,则只需把标签添加到替换文本后即可创建链接。
如果只需要单个Org缓冲区的特殊缩写,可以在文件中定义它们
#+LINK: bugzilla http://10.1.2.9/bugzilla/show_bug.cgi?id= #+LINK: google http://www.google.com/search?q=%s |
3.7 文件链接的搜索选项
3.8 自定义搜索
4 待办事项
Org-mode
不把 TODO
列表作为单独的文档来维护。 相反, TODO
列表是笔记的组成部分,因为它通常产生于记录笔记时!
使用 Org-mode
,只需将树中的任何条目标记为 TODO
就可构造出 TODO
列表。 这种方式,信息不会冗余重复,并且始终显示 TODO
项出现的整个上下文。
当然,这种用于管理 TODO
项的方式会将它们分散在各个笔记文件中。 Org-mode
通过提供一些方法使我们可以把它们看作一个整体来处理。
4.1 基础的待办事项功能
以 TODO
关键字开始的任意标题都会变为代办事项,例如:
*** TODO Write letter to Sam Fortune
Key | Desc | Command |
---|---|---|
C-c C-t |
转换当前项的TODO状态 _,-> (unmarked) -> TODO -> DONE –._ | org-todo |
C-u C-c C-t |
当TODO关键字没有选择时,使用补全选择特定的关键字; 否则强制循环遍历TODO状态,没有提示。 | |
S-left/right |
选择之后/之前的TODO状态,像是循环。 | |
C-c / t |
构造出TODO列的稀疏树;折叠整个缓冲区,但显示所有TODO项( not-DONE 状态)和其上的标题层次结构。 使用前缀参数(或使用 C-c / T ),搜索特定的TODO。 系统提示输入关键字,还可以输入KWD1 | KWD2 | …等关键字,列出与这些关键字中的任何一个匹配的项。 使用数字前缀参数N,在选项 org-todo-keywords 中显示第N个关键字的树。 使用两个前缀参数,找到所有TODO状态,无论是完成还是未完成。 |
org-show-todo-tree |
C-c a t |
展示全局 TODO 列表;将所有agenda文件中的TODO项( not-DONE 状态)收集到一个缓冲区中。 新的缓冲区将处于 agenda-mode ,它提供了从新的缓冲区检查和操作TODO项的命令。 |
org-todo-list |
S-M-RET |
在当前项之后插入新的 TODO 项 |
org-insert-todo-heading |
注: 改变 TODO
状态也可触发标签发生变更。 请参阅 org-todo-state-tags-triggers
文档以了解详细信息, 也可可查看How to automatically trigger a change in TODO state in Emacs org-mode。
4.2 待办事项扩展
默认情况下, 待办事项只能为以下两种状态之一: TODO
和 DONE
。
Org-mode
允许使用 TODO
关键字(存储在 org-todo-keywords
)以更复杂的方式对 TODO
项目进行分类管理。
通过特殊设置, TODO
关键字系统可在不同的文件对不同的工作流程进行定制。
4.2.1 工作流状态应用
可以使用 TODO
关键字来表示项目进行过程中工作流状态,例如:
(setq org-todo-keywords '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED"))) |
垂直条将 TODO
关键字(需要处理的状态)从DONE状态分离(无需进一步操作)。
如果不提供垂直条,则最后一个状态用作 DONE
状态。
使用以上设置,命令 C-c C-t
将待办事项从 TODO
循环到 FEEDBACK
,然后到 VERIFY
,最后到 DONE
和 DELEGATED
。
也可以使用数字前缀参数快速选择特定状态。 例如, C-3 C-c C-t
将立即将状态更改为VERIFY。 或者可以使用 S-left/right
向后/向前遍历序列。
4.2.2 类型标示应用
第二种可能性是使用TODO关键字来指示待办事项的隶属于不同类型。
例如,可能希望指出项目是 work 或 home 。
或者,当在一个项目中与多个人合作时,可能需要通过使用他们的名字作为 TODO
关键字来将项目任务直接分配给个人。
如下配置:
(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE"))) |
在这种情况下,不同的关键字不表示序列,而是不同的类型。
所以正常的工作流程是将任务分配给一个人,然后将其标记为DONE。
Org-mode
通过调整命令 C-c C-t
的工作机制来支持这种风格。
当连续使用多次时,它仍将循环遍历所有名称,以便首先为任务选择正确的类型。
但是,当经过一段时间后返回该项目并再次执行 C-c C-t
,它将从任何名称直接切换到 DONE
。
使用前缀参数或完成快速选择一个特定的名称。 还可以使用 C-c / t
的数字前缀来查看稀疏树中特定 TODO
类型的项目。
例如,要查看Lucy所做的一切事情,使用 C-3 C-c / t
。
要将Lucy的所有项目从所有议程文件收集到一个单独的库中,还可以在创建全局TODO列表时使用数字前缀参数: C-3 C-c a t
。
4.2.3 单个文件中多个关键字集合
有时可能需要并行使用不同的TODO关键字集。
例如,可能需要具有基本的 TODO
/ DONE
,还有一个修复错误的工作流程,以及指示某个项目已被取消的单独状态(因此它不是 DONE
,也不需要执行操作)。
设置如下所示:
(setq org-todo-keywords '((sequence "TODO" "|" "DONE") (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED") (sequence "|" "CANCELED"))) |
这些关键字应该是不同的,这有助于 Org-mode
跟踪给定条目应该使用哪个子序列。
在这个设置中, C-c C-t
只能在一个子序列中运行,
所以它从 DONE
切换到(无)到 TODO
,
从 FIXED
切换到(无)到 REPORT
。
因此,需要一种机制来正确初始选择序列。
除了显式的键入关键字或使用补全外,还可应用以下命令:
-
C-u C-u C-c C-t
C-S-right/left
这些键从一个 TODO
子集跳到下一个。
在上面的例子中, C-u C-u C-c C-t
或 C-S-right
将从 TODO 或 DONE 跳到 REPORT ,
而第二行中的任何一个字都可跳转到 CANCELED
。
-
S-right/left
S-right/left
并从所有集合中遍历所有关键字,例如在上面的例子中,S-right将从DONE切换到REPORT。
4.2.4 快速访问代办状态
如果要快速将条目更改为任意TODO状态,而不是循环遍历状态,则可以设置单个字符来快速访问状态的键。 这是通过在每个关键字后面的括号中添加选择字符来完成的。
(setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)") (sequence "|" "CANCELED(c)"))) |
如果按C-c C-t,后按选择键,则条目将切换到此状态。 SPC可用于从条目中删除任何TODO关键字。
4.2.5 为文件设置独立的关键字集合
在不同文件中使用 TODO
机制的不同方面是非常有用的。
对于文件本地设置,需要在文件中添加专用行,仅为该文件设置关键字和仅对当前文件起效。
例如,要设置上述两个示例之一,需要在文件中包含以下任何一行:
#+TODO: TODO FEEDBACK VERIFY | DONE CANCELED |
或者
#+TYP_TODO: Fred Sara Lucy Mike | DONE |
并行使用几组的设置如下:
#+TODO: TODO | DONE #+TODO: REPORT BUG KNOWNCAUSE | FIXED #+TODO: | CANCELED |
在更改其中一行后,在行中使用 C-c C-c
,以使变更生效。
4.2.6 代办事项关键字的样式
Org-mode
突出显示具有特殊样式的TODO关键字:关键字的 org-todo
表示某个项目仍然需要执行,对于表示项目完成的关键字 org-done
。
如果使用两种以上的不同状态,可能需要为其中某些状态使用特殊样式。 可使用选项 org-todo-keyword-faces
来完成。
例如:
(setq org-todo-keyword-faces '(("TODO" . org-warning) ("STARTED" . "yellow") ("CANCELED" . (:foreground "blue" :weight bold)))) |
4.2.7 待办事项的依赖关系
Org
结构(层次结构和列表)可以轻松定义TODO依赖关系。
通常,在将所有子任务标记为 DONE
之前,不应将父 TODO
任务标记为 DONE
。
有时,对于一些(子)任务有一个逻辑顺序,所以在完成上面的所有兄弟任务之前,一个任务不能被执行。
如果设置自定义选项 org-enforce-todo-dependencies
,Org将会阻塞任务从 TODO
更改为 DONE
,而它的子项不是DONE。
此外,如果条目具有 ORDERED
属性,则每个子项将被阻塞,直到所有较早的兄弟节点被标记为 DONE
。
设置 org-enforce-todo-dependencies
,如下所示:
(setq org-enforce-todo-dependencies t) |
依赖关系示例如下:
* TODO Blocked until (two) is done ** DONE one ** TODO two * Parent :PROPERTIES: :ORDERED: t :END: ** TODO a ** TODO b, needs to wait for (a) ** TODO c, needs to wait for (a) and (b) |
可以使用 NOBLOCKING
属性确保从不阻塞输入:
* This entry is never blocked :PROPERTIES: :NOBLOCKING: t :END: |
-
C-c C-x o
切换当前条目的 ORDERED
属性。 ORDERED
属性只适用于当前项,而不是像标签一样可继承。
但是,如果要使用标签跟踪该属性的值,以便更好地查看,请自定义选项 org-track-ordered-property-with-tag
。
-
C-u C-u C-u C-c C-t
- 改变
TODO
状态,规避任何状态阻塞。
如果设置选项 org-agenda-dim-blocked-tasks
,则由于这些依赖关系而无法关闭的TODO条目将以渐变字体显示,甚至在议程视图中不可见。
还可以通过查看复选框来阻止 TODO
状态的更改。 如果设置了选项 org-enforce-todo-checkbox-dependencies
,则将禁止具有未选中复选框的条目切换到 DONE
。
如果需要更复杂的依赖关系结构,例如不同树或文件中的条目之间的依赖关系,请查看模块 org-depend.el 。
4.3 进度记录
4.3.1 关闭项目
4.3.2 追踪TODO状态变化
4.3.3 追踪你的习惯
4.4 优先级
4.5 任务分解
4.6 复选框
5 标签
6 属性
7 日期和时间
8 捕获——转发——存档
9 议程视图
Footnotes:
org-mode 官方链接地址: http://orgmode.org
Render by hexo-renderer-org with Emacs 25.3.2 (Org mode 8.2.10)