3.1 Built-in Table Editor

Org 可以轻松在纯 ASCII 文本中排版表格。任何以 ‘|’ 作为首个非空白字符的行都会被视为表格的一部分。 ‘|’ 同时也用作列分隔符17。 此外,以 ‘|-’ 开头的行表示水平分隔线,用于显式分隔行。 第一条水平分隔线之前的行均为表头行。一个表格示例如下:

| Name  | Phone | Age |
|-------+-------+-----|
| Peter |  1234 |  17 |
| Anna  |  4321 |  25 |

在表格内按下 TABRETC-c C-c 时,表格会自动重新对齐。 TAB 还会跳至下一个单元格—RET 跳至下一行— 并在表格末尾或水平分隔线之前创建新的表格行。表格的缩进由第一行决定。 每次重新对齐时,水平分隔线会自动扩展至整个表格宽度。因此,要创建上面的表格,你只需输入:

|Name|Phone|Age|
|-

然后按下 TAB 对齐表格并开始填写内容。 更快的方式是输入 ‘|Name|Phone|Age’ ,随后按下 C-c RET

在单元格中输入文本时,Org 会对 DELBackspace 以及所有字符按键做特殊处理,确保插入和删除操作不会打乱其他单元格。 此外,在通过 TABS-TABRET 移动到新单元格后 立即(immediately) 输入内容时,该单元格会自动清空。 如果你觉得该行为不够可控,可配置选项 org-table-auto-blank-field

Creation and conversion

C-c | (org-table-create-or-convert-from-region)

将选中区域转换为表格。如果每行至少包含一个 TAB 字符, 函数会判定内容为制表符分隔。如果每行包含逗号,则判定为逗号分隔值(CSV)。 否则按空白字符分割为单元格。你可以使用前缀参数强制指定分隔符: C-u 强制为 CSV,C-u C-u 强制为 TABC-u C-u C-u 会提示输入匹配分隔符的正则表达式, 数字前缀参数 N 表示至少连续 N 个空格或一个 TAB 作为分隔符。

如果没有选中区域,该命令会创建一个空的 Org 表格。 不过更简单的方式是直接开始输入,例如 | N a m e | P h o n e | A g e RET | - TAB

Re-aligning and field motion

C-c C-c (org-table-align)

重新对齐表格,光标位置不变。

TAB (org-table-next-field)

重新对齐表格,跳至下一个单元格,必要时创建新行。

M-x org-table-blank-field

清空当前表格单元格或选中区域。

S-TAB (org-table-previous-field)

重新对齐表格,跳至上一个单元格。

RET (org-table-next-row)

重新对齐表格并跳至下一行,必要时创建新行。 在行首或行尾时,RET 仍会插入新行,因此可用于拆分表格。

M-a (org-table-beginning-of-field)

跳至当前表格单元格开头,或跳至上一个单元格。

M-e (org-table-end-of-field)

跳至当前表格单元格末尾,或跳至下一个单元格。

Column and row editing

M-LEFT (org-table-move-column-left)

将当前列左移。

M-RIGHT (org-table-move-column-right)

将当前列右移。

M-S-LEFT (org-table-delete-column)

删除当前列。

M-S-RIGHT (org-table-insert-column)

在光标位置插入新列,将当前列及右侧所有单元格右移。

M-UP (org-table-move-row-up)

将当前行上移。

M-DOWN (org-table-move-row-down)

将当前行下移。

M-S-UP (org-table-kill-row)

与上方相邻单元格交换位置,实现单元格上移。

S-UP (org-table-move-cell-up)

Move cell up by swapping with adjacent cell.

S-DOWN (org-table-move-cell-down)

与下方相邻单元格交换位置,实现单元格下移。

S-LEFT (org-table-move-cell-left)

与左侧相邻单元格交换位置,实现单元格左移。

S-RIGHT (org-table-move-cell-right)

与右侧相邻单元格交换位置,实现单元格右移。

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)

对区域内的表格行排序。光标位置指定排序列, 行范围为最近的水平分隔线之间的区域或整个表格。 如果光标在第一列之前,会提示选择排序列。 如果存在选中区域,标记指定首行与排序列,光标应位于排序包含的最后一行。 命令会提示排序类型:字母序、数字序或时间序。 可选择正序或倒序,也可使用自定义的键提取与比较函数。 带前缀参数调用时,字母排序区分大小写。

Regions

C-c C-x M-w (org-table-copy-region)

将表格中的矩形区域复制到专用剪贴板。 光标与标记确定矩形的边界单元格。若无选中区域,则仅复制当前单元格。 该过程会忽略水平分隔线。

C-c C-x C-w (org-table-cut-region)

将表格中的矩形区域复制到专用剪贴板,并清空该矩形内所有单元格,即 “剪切(cut)” 操作。

C-c C-x C-y (org-table-paste-rectangle)

将矩形区域粘贴到表格中,左上角对齐当前单元格,覆盖所有相关单元格。 如果矩形大小超出当前表格,表格会按需扩展。该过程忽略水平分隔线。

M-RET (org-table-wrap-region)

在光标位置拆分当前单元格,将剩余内容移至下一行。 如果存在选中区域且光标与标记在同一列,该列文本会自动换行至指定行数的最小宽度。 数字前缀参数可修改目标行数。若无选中区域但指定前缀参数, 则清空当前单元格,并将内容追加到上方单元格。

Calculations

C-c + (org-table-sum)

对当前列或选中区域矩形内的数字求和。 结果显示在回显区,可通过 C-y 插入。

S-RET (org-table-copy-down)

当前单元格为空时,从上方第一个非空单元格复制内容。 不为空时,将当前单元格内容复制到下一行并同步移动光标。

根据变量 org-table-copy-increment 的设置, 整数、时间戳字段以及前后带整数的字段在复制时可自动递增。 前缀参数 0 可临时禁用递增功能。

该快捷键同样用于选区切换及相关模式(详见 Packages that conflict with Org mode)。

Miscellaneous

C-c ` (org-table-edit-field)

在独立窗口中编辑当前单元格,适用于内容无法完全显示的单元格(详见 Column Width and Alignment)。 带一个 C-u 前缀调用时,仅完整显示单元格以便原地编辑。 带两个 C-u 前缀调用时,编辑窗口会跟随光标在表格中移动并始终显示当前单元格。 跟随模式在光标离开表格或重复执行 C-u C-u C-c ` 时自动退出。

M-x org-table-import

导入文件作为表格。表格内容应为制表符或空白字符分隔。 例如可用于导入电子表格或数据库数据,这类程序通常可导出制表符分隔的文本文件。 该命令先将文件插入缓冲区,再将区域转换为表格。 所有前缀参数都会传递给转换器,用于确定分隔符。

C-c | (org-table-create-or-convert-from-region)

也可通过以下方式导入表格:将表格文本粘贴到 Org 缓冲区, 使用 C-x C-x 选中粘贴内容,然后执行 C-c | 命令(详见 Creation and conversion)。

M-x org-table-export

导出表格,默认格式为制表符分隔文件,用于与电子表格或数据库程序交换数据。 导出格式可通过变量 org-table-export-default-format 配置。 也可使用属性 ‘TABLE_EXPORT_FILE’ 与 ‘TABLE_EXPORT_FORMAT’ 在子树中指定导出文件名与格式。Org 支持非常通用的表格导出格式, 导出器格式与 Orgtbl 无线电表格所用格式一致,详见 Translator functions

M-x org-table-header-line-mode

当表格首行数据在缓冲区中不可见时,在窗口标题栏显示该行内容。 可将选项 org-table-header-line-p 设置为 t 以默认启用该次要模式。

M-x org-table-transpose-table-at-point

对光标处的表格进行转置并移除水平分隔线。


Footnotes

(17)

若要在表格单元格内插入竖线,可使用 ‘\vert’ ,或在单词内部使用 ‘abc\vert{}def’ 。