如何在emacs组织模式中选择表的列

时间:2014-02-25 00:47:13

标签: emacs org-mode

我找不到从桌子上复制一个列或一系列列的方法。

到目前为止,我找到的唯一解决方案是复制整个表格,然后删除我不需要的列。

我认为必须有另一种更简单的方法。也许我太累了,不知道该怎么做。

5 个答案:

答案 0 :(得分:15)

我认为最简单的方法是利用emacs矩形

  1. 要创建矩形,请将光标放在要创建的矩形的一个角上。

  2. 使用C-SPC或您设置set-mark-command的任何内容。

  3. 将光标放在矩形的对角线上。

  4. 使用C-x r r r 将矩形复制到名为r

  5. 的注册表中
  6. 使用C-x r i r 插入名为r的注册表中的矩形。

  7. 执行此过程后,将复制并插入所需的列。如果列不相邻,则可能需要重复此过程。

    注意

    我使用粗体 r 来表示这在技术上是寄存器的名称,而不是一些特殊输入。

答案 1 :(得分:6)

如果您特别想将列复制到另一个组织表(或者实际上又回到原始表中),那么就可以支持。

参见 C-h f org-table-copy-region RET

它的工作原理与常规矩形命令非常相似,因此它不是选择列的更好界面;但关联的粘贴命令 智能关于它对内容的作用。

答案 2 :(得分:5)

我打算使用emacs rectangle命令,通过使用命令copy-rectangle-as-kill绑定 Cx r Mw来避免使用寄存器,在选择一个区域后执行该命令,这将复制矩形(有关标记矩形如何工作的示例,请参阅this)。然后你可以通过 C-x r y 来粘贴复制的侦察。

<强>更新

页面org-mode hacks描述了使用org-table公式复制列的方法。您需要为表命名。

以下是使用表公式从另一个表中复制列的示例

假设您有以下名为FOO的表,则必须将该表命名为从表公式中引用它。

#+TBLNAME: FOO
| 0 | 2 | 1 |
| 1 | 3 | 2 |
| 2 | 4 | 3 |

您希望将表格FOO中的第1列和第3列复制到下表中的第1列和第3列(将其称为B)

|  | 5 |  |
|  | 6 |  |
|  | 7 |  |

下面的公式可以解决这个问题,你需要复制表B下面的公式并将光标移动到公式上并执行 C-c C-c

#+TBLFM: $1=remote(FOO,@@#$1)::$2=remote(FOO,@@#$3)

表B将转换为以下

| 0 | 5 | 1 |
| 1 | 6 | 2 |
| 2 | 7 | 3 |

您可以阅读组织表公式here的语法,基本上$N表示第N列,@N表示第N行。可以使用@#$#代替N来引用当前值所在的行和列。 remote(table-name, @N$N)指的是表table-name的第N行和第N列。 ::汇总多个公式。

答案 3 :(得分:1)

我也无法使用标准矩形操作。移动到下一列时,点和标记之间的所有行都会突出显示。当我尝试按上述方法和组织模式黑客按公式复制列时,如果列的值不是带有多个单词的数字,则组织会抛出错误。

但是关于切割和粘贴的一个很好的暗示表明问题是光标运动的初始方向。首先向右移动到下一列,然后向下突出显示正确的区域。然后标准矩形操作正常工作。

答案 4 :(得分:0)

用户2053036的答案已经涵盖了组织模式下的“本机”方式;我只是想在更简单的上下文中添加“在表中复制列”:假设您有此表

| hello | world | | is | good |

并要在第3列中重复第2列。

步骤:

  1. 将光标置于右下角|的桌子
  2. 使用Alt-Shift-<right>键在右侧打开一个新列

| hello | world | | | is | good | |

  1. 添加“行复制自”公式(例如,将光标置于第1行的第3列并输入=$1 C-c C-c;或者只需在表格下方键入TBLFM并跳至步骤4)

| hello | world | hello | | is | good | | #+TBLFM: $3=$1

  1. 将光标放在TBLFM上,然后键入C-c C-c

| hello | world | hello | | is | good | is | #+TBLFM: $3=$1

这会将第1列复制到第3列。