Org 可以轻松在纯 ASCII 文本中排版表格。任何以 ‘|’ 作为首个非空白字符的行都会被视为表格的一部分。 ‘|’ 同时也用作列分隔符17。 此外,以 ‘|-’ 开头的行表示水平分隔线,用于显式分隔行。 第一条水平分隔线之前的行均为表头行。一个表格示例如下:
| Name | Phone | Age | |-------+-------+-----| | Peter | 1234 | 17 | | Anna | 4321 | 25 |
在表格内按下 TAB、RET 或 C-c C-c 时,表格会自动重新对齐。 TAB 还会跳至下一个单元格—RET 跳至下一行— 并在表格末尾或水平分隔线之前创建新的表格行。表格的缩进由第一行决定。 每次重新对齐时,水平分隔线会自动扩展至整个表格宽度。因此,要创建上面的表格,你只需输入:
|Name|Phone|Age| |-
然后按下 TAB 对齐表格并开始填写内容。 更快的方式是输入 ‘|Name|Phone|Age’ ,随后按下 C-c RET。
在单元格中输入文本时,Org 会对 DEL、Backspace
以及所有字符按键做特殊处理,确保插入和删除操作不会打乱其他单元格。
此外,在通过 TAB、S-TAB 或 RET
移动到新单元格后 立即(immediately) 输入内容时,该单元格会自动清空。
如果你觉得该行为不够可控,可配置选项 org-table-auto-blank-field 。
org-table-create-or-convert-from-region) ¶将选中区域转换为表格。如果每行至少包含一个 TAB 字符, 函数会判定内容为制表符分隔。如果每行包含逗号,则判定为逗号分隔值(CSV)。 否则按空白字符分割为单元格。你可以使用前缀参数强制指定分隔符: C-u 强制为 CSV,C-u C-u 强制为 TAB, C-u C-u C-u 会提示输入匹配分隔符的正则表达式, 数字前缀参数 N 表示至少连续 N 个空格或一个 TAB 作为分隔符。
如果没有选中区域,该命令会创建一个空的 Org 表格。 不过更简单的方式是直接开始输入,例如 | N a m e | P h o n e | A g e RET | - TAB。
org-table-align) ¶重新对齐表格,光标位置不变。
org-table-next-field) ¶重新对齐表格,跳至下一个单元格,必要时创建新行。
清空当前表格单元格或选中区域。
org-table-previous-field) ¶重新对齐表格,跳至上一个单元格。
org-table-next-row) ¶重新对齐表格并跳至下一行,必要时创建新行。 在行首或行尾时,RET 仍会插入新行,因此可用于拆分表格。
org-table-beginning-of-field) ¶跳至当前表格单元格开头,或跳至上一个单元格。
org-table-end-of-field) ¶跳至当前表格单元格末尾,或跳至下一个单元格。
org-table-move-column-left) ¶将当前列左移。
org-table-move-column-right) ¶将当前列右移。
org-table-delete-column) ¶删除当前列。
org-table-insert-column) ¶在光标位置插入新列,将当前列及右侧所有单元格右移。
org-table-move-row-up) ¶将当前行上移。
org-table-move-row-down) ¶将当前行下移。
org-table-kill-row) ¶与上方相邻单元格交换位置,实现单元格上移。
org-table-move-cell-up) ¶Move cell up by swapping with adjacent cell.
org-table-move-cell-down) ¶与下方相邻单元格交换位置,实现单元格下移。
org-table-move-cell-left) ¶与左侧相邻单元格交换位置,实现单元格左移。
org-table-move-cell-right) ¶与右侧相邻单元格交换位置,实现单元格右移。
org-table-insert-row) ¶在当前行上方插入新行。使用前缀参数时,在当前行下方创建新行。
org-table-insert-hline) ¶在当前行下方插入水平分隔线。使用前缀参数时,在当前行上方创建分隔线。
org-table-hline-and-move) ¶在当前行下方插入水平分隔线,并将光标移至该分隔线下方的行。
org-table-sort-lines) ¶对区域内的表格行排序。光标位置指定排序列, 行范围为最近的水平分隔线之间的区域或整个表格。 如果光标在第一列之前,会提示选择排序列。 如果存在选中区域,标记指定首行与排序列,光标应位于排序包含的最后一行。 命令会提示排序类型:字母序、数字序或时间序。 可选择正序或倒序,也可使用自定义的键提取与比较函数。 带前缀参数调用时,字母排序区分大小写。
org-table-copy-region) ¶将表格中的矩形区域复制到专用剪贴板。 光标与标记确定矩形的边界单元格。若无选中区域,则仅复制当前单元格。 该过程会忽略水平分隔线。
org-table-cut-region) ¶将表格中的矩形区域复制到专用剪贴板,并清空该矩形内所有单元格,即 “剪切(cut)” 操作。
org-table-paste-rectangle) ¶将矩形区域粘贴到表格中,左上角对齐当前单元格,覆盖所有相关单元格。 如果矩形大小超出当前表格,表格会按需扩展。该过程忽略水平分隔线。
org-table-wrap-region) ¶在光标位置拆分当前单元格,将剩余内容移至下一行。 如果存在选中区域且光标与标记在同一列,该列文本会自动换行至指定行数的最小宽度。 数字前缀参数可修改目标行数。若无选中区域但指定前缀参数, 则清空当前单元格,并将内容追加到上方单元格。
org-table-sum) ¶对当前列或选中区域矩形内的数字求和。 结果显示在回显区,可通过 C-y 插入。
org-table-copy-down) ¶当前单元格为空时,从上方第一个非空单元格复制内容。 不为空时,将当前单元格内容复制到下一行并同步移动光标。
根据变量 org-table-copy-increment 的设置,
整数、时间戳字段以及前后带整数的字段在复制时可自动递增。
前缀参数 0 可临时禁用递增功能。
该快捷键同样用于选区切换及相关模式(详见 Packages that conflict with Org mode)。
org-table-edit-field) ¶在独立窗口中编辑当前单元格,适用于内容无法完全显示的单元格(详见 Column Width and Alignment)。 带一个 C-u 前缀调用时,仅完整显示单元格以便原地编辑。 带两个 C-u 前缀调用时,编辑窗口会跟随光标在表格中移动并始终显示当前单元格。 跟随模式在光标离开表格或重复执行 C-u C-u C-c ` 时自动退出。
导入文件作为表格。表格内容应为制表符或空白字符分隔。 例如可用于导入电子表格或数据库数据,这类程序通常可导出制表符分隔的文本文件。 该命令先将文件插入缓冲区,再将区域转换为表格。 所有前缀参数都会传递给转换器,用于确定分隔符。
org-table-create-or-convert-from-region) ¶也可通过以下方式导入表格:将表格文本粘贴到 Org 缓冲区, 使用 C-x C-x 选中粘贴内容,然后执行 C-c | 命令(详见 Creation and conversion)。
导出表格,默认格式为制表符分隔文件,用于与电子表格或数据库程序交换数据。
导出格式可通过变量 org-table-export-default-format 配置。
也可使用属性 ‘TABLE_EXPORT_FILE’ 与 ‘TABLE_EXPORT_FORMAT’
在子树中指定导出文件名与格式。Org 支持非常通用的表格导出格式,
导出器格式与 Orgtbl 无线电表格所用格式一致,详见 Translator functions。
当表格首行数据在缓冲区中不可见时,在窗口标题栏显示该行内容。
可将选项 org-table-header-line-p 设置为 t 以默认启用该次要模式。
对光标处的表格进行转置并移除水平分隔线。