Как выбрать столбец таблицы в режиме emacs org

Я не могу найти способ копирования столбца или ряда из таблицы.

Единственное решение, которое я нашел до сих пор, - это скопировать всю таблицу, а затем удалить столбцы, которые мне не нужны.

Я полагаю, что для этого должен быть еще один простой способ. Может быть, я слишком устал, чтобы понять, как это сделать.

Ответ 1

Я думаю, что самым простым способом было бы использовать прямоугольники emacs

  • Чтобы создать прямоугольник, поместите курсор в один из углов прямоугольника, который вы хотите создать.

  • Используйте C-SPC или то, что у вас установлено set-mark-command.

  • Поместите курсор в диагональный угол вашего прямоугольника.

  • Используйте C-x r r r, чтобы скопировать прямоугольник в регистр с именем r

  • Используйте C-x r i r, чтобы вставить прямоугольник, который хранится в регистре с именем r.

После этого процесса скопируйте и вставьте нужные столбцы. Возможно, вам придется повторить этот процесс, если столбцы не смежны.

Примечание

Я использую полужирный r, чтобы обозначить, что это технически имя регистра, а не какой-то специальный ввод.

Ответ 2

Если вы специально хотите скопировать столбец (столбцы) в другую таблицу org (или, вернее, в исходную таблицу), поддерживайте это.

См. C-h f org-table-copy-region RET

Он работает так же, как и обычные команды прямоугольника, поэтому он не лучший интерфейс для выбора столбца; но связанная команда вставки умна о том, что она делает с контентом.

Ответ 3

Я планирую использовать команду emacs rectangle, чтобы избежать использования регистров, используя команду copy-rectangle-as-kill bound C-x r M-w, выполните команду после выбора области, которая скопирует прямоугольник (см. this для примера того, как работают прямоугольники маркировки). Затем вы можете вставить скопированный ремангл, выполнив C-x r y.

UPDATE

Страница org-mode hacks описывает способ копирования столбцов с использованием формул org-table. Вам нужно будет назвать таблицу.

Вот пример использования табличных формул для копирования столбцов из другой таблицы

Предположим, что у вас есть следующая таблица с именем FOO, необходимо указать таблицу для обращения к ней из формул таблицы.

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

Вы хотите скопировать столбцы 1 и 3 из таблицы FOO в столбцы 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 |

Вы можете прочитать о синтаксисе формул org table здесь, в основном $N относится к N-й колонке, @N относится к N-я строка. @# и $# могут использоваться вместо N для ссылки на строку и столбец, где текущее значение идет. remote(table-name, @N$N) относится к N-й строке и N-му столбцу таблицы table-name. :: объединяет несколько формул.

Ответ 4

Мне тоже не удалось использовать стандартные операции прямоугольника. При переходе к следующему столбцу были выделены все строки между точкой и меткой. Когда я попытался скопировать столбцы по формуле, описанной выше, и в режиме хакеров org, org бросил ошибки, если значения столбца были нечисловыми с более чем одним словом.

Но хороший намек на резку и склеивание показал, что проблема заключается в начальном направлении движения курсора. Перемещение сначала вправо в следующий столбец, затем вниз выделяет правильную область. Затем выполняются стандартные операции прямоугольника.