如何在emacs org模式中选择表格的列

16

我找不到从表中复制一列或一系列列的方法。

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

我想必定有更简单的方法。也许我只是太累了,无法意识到如何做到这一点。

5个回答

21

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

  1. 将光标放在您想创建矩形的角落之一。

  2. 使用 C-SPC,或者您所设置的任何 set-mark-command

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

  4. 使用 C-x r rr 将该矩形复制到名为 r 的寄存器中。

  5. 使用 C-x r ir 插入在寄存器 r 中保存的矩形。

按照这个过程将会复制和插入您想要的列。如果列不相邻,则可能需要重复此过程。

注意

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


像使用r作为寄存器名称一样,易于记忆。 - sakura

8

如果你想将某一列(或多列)复制到另一个org表格中(或者是回到原始表格),这个功能是支持的。

请参见C-hf org-table-copy-region RET

它的使用方式类似于常规的矩形命令,因此并不是更好的选择列的界面;但相关联的粘贴命令是聪明的,能够很好地处理内容。


5
如果您打算使用emacs矩形命令,则可以使用命令copy-rectangle-as-kill避免使用寄存器,绑定为C-xrM-w。在选择区域后执行该命令,这将复制矩形(有关标记矩形的工作原理,请参见此处)。然后,您可以通过执行C-xry来粘贴已复制的矩形。 更新 页面org-mode hacks描述了使用org-table公式复制列的方法。您需要为表格命名。
以下是使用表格公式从另一个表格复制列的示例:
假设您有以下名为FOO的表格,必须为其命名以便从表格公式中引用它。
#+TBLNAME: FOO
| 0 | 2 | 1 |
| 1 | 3 | 2 |
| 2 | 4 | 3 |

你想要将表格 FOO 的第一列和第三列复制到下表格(我们称其为 B)的第一列和第三列。
|  | 5 |  |
|  | 6 |  |
|  | 7 |  |

下面的公式将解决问题,您需要将公式复制到表格B下方,并将光标移动到公式上,然后执行C-cC-c
#+TBLFM: $1=remote(FOO,@@#$1)::$2=remote(FOO,@@#$3)
B表将转换为以下内容
| 0 | 5 | 1 |
| 1 | 6 | 2 |
| 2 | 7 | 3 |

您可以在这里阅读有关org表格公式语法的内容:链接,基本上$N指的是第N列,@N则指第N行。您也可以使用@#$#来代替N,并引用当前值所在的行和列。而remote(table-name, @N$N)则指的是表格table-name的第N行和第N列。::可用于连接多个公式。

1
我也曾经在使用标准矩形操作时遇到了麻烦。当移动到下一列时,点和标记之间的所有行都被突出显示。当我尝试按上述方法通过公式复制列时,如果列的值不是数字且超过一个单词,org会抛出错误。
但是一个好的提示关于剪切和粘贴揭示了问题是光标的初始运动方向。首先向右移动到下一列,然后向下突出显示正确的区域。标准矩形操作然后可以正常工作。

0

在org模式下,“本地”方法已经由user2053036回答中涉及了,我只是想简单介绍一下“在表格内复制列”的方法:假设你有这样一个表格:

| hello | world | | is | good |

现在,你想要将第二列重复到第三列。

步骤如下:

  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

| 你好 | 世界 | 你好 | | 是 | 好 | 是 | #+TBLFM: $3=$1

这将把第一列复制到第三列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接