2014-02-25 44 views
11

我无法找到自己的方法来从表格中复制列或其中的一系列列。如何在emacs组织模式中选择一列表格

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

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

回答

15

我认为最简单的方法是采取emacs的优势矩形

  1. 要创建矩形,请将光标置于您要创建矩形的一个角。

  2. 使用C-SPC,或任何你有set-mark-command设置为。

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

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

  5. 使用C-x r ir可以插入一个名为r寄存器正在举行的矩形寄存器。

按照此过程将复制并插入所需的列。如果列不相邻,则可能需要重复此过程。

注意

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

+0

像使用r作为寄存器名称。容易记忆。 – sakura

3

我你打算使用emacs矩形命令,使用命令copy-rectangle-as-kill避免使用寄存器约束CX[R分子量,选择一个区域,这将复制矩形后执行命令(见this有关如何标记矩形的示例)。然后您可以通过做粘贴复制的网线C-xry

UPDATE

org-mode hacks页描述的方式来复制使用组织表的公式列。您需要为表格命名。

下面是一个使用表格公式从另一个表复制列的一个例子

假设你有以下命名FOO表,有必要来命名表,从表中公式引用它。

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

你想从表FOO列1和3复制到第1列和下面的表3(可以称之为B)

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

下面的公式就可以了,你需要将公式复制而表B下面和移动光标的公式和做抄送抄送

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

表B将被转换为下面

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

可以读取关于org表中的公式here的语法,基本上$N是指第N列,@N是指第N行。可以使用@#$#来代替N来引用当前值所在的行和列。 remote(table-name, @N$N)是指表table-name的第N行和第N列。 ::连接多个公式。

6

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

C-H˚Forg-table-copy-regionRET

它的工作原理很像常规的矩形命令,所以它不是选择列一个更好的界面;但关联的粘贴命令,它明智地处理了内容的作用。

1

我也无法使用标准的矩形操作。当移动到下一列时,点和标记之间的所有行都会突出显示。当我试图按照上面描述的公式复制列时,并且在组织模式下,如果列值非数字且具有多个单词,则org会抛出错误。

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