【问题标题】:How to select a column of a table in emacs org mode如何在emacs org模式下选择表格的一列
【发布时间】:2014-02-25 00:47:12
【问题描述】:

我无法从表格中复制一列或一系列列。

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

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

【问题讨论】:

    标签: emacs org-mode


    【解决方案1】:

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

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

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

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

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

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

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

    注意

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

    【讨论】:

    • 喜欢使用 r 作为寄存器名。容易记忆。
    【解决方案2】:

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

    C-hf org-table-copy-region RET

    它的工作方式很像常规的矩形命令,所以它不是一个更好的选择列的界面;但是相关的粘贴命令 对它对内容的作用很聪明。

    【讨论】:

      【解决方案3】:

      我你打算使用emacs rectangle命令你避免使用寄存器通过使用命令copy-rectangle-as-killbound C-xrM-w ,在选择一个区域后执行命令,这将复制矩形(有关标记矩形如何工作的示例,请参阅this)。然后您可以通过执行 C-xry 来粘贴复制的 retangle。

      更新

      页面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下面的公式并将光标移动到公式上并执行C-cC-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 列。 :: 连接多个公式。

      【讨论】:

        【解决方案4】:

        我在使用标准矩形运算时也遇到了麻烦。移动到下一列时,点和标记之间的所有行都被突出显示。当我尝试按上述公式和 org 模式 hacks 复制列时,如果列的值不是超过一个单词的非数字,则 org 会抛出错误。

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

        【讨论】:

          【解决方案5】:

          用户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 列。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多