Pull to refresh

Таблицы — Emacs и org-mode

Reading time3 min
Views11K
На хабре уже есть посты про удивительные возможности org-mode — раз, два и три. В этом экскурсе я хочу рассказать ещё об одной возможности, с помощью которой можно пользоваться таблицами в текстовом редакторе (да, я про Emacs) без боли и унижения. А в org-mode таблицы достаточно просты и удобны:

|           ip | description          | users |
|--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.12 | Касса1               |     1 |
| 192.168.0.13 | Касса2               |     1 |
| 192.168.0.14 | Приёмная             |     2 |
|--------------+----------------------+-------|
|              | Всего пользователе=> |     6 |

Итак, поехали: активируем org-mode выполнив M-x org-mode RET или открыв файл .org в emacs.

1. Создание и навигация по таблице

Таблицы создаются просто: C-c | (shift + \ в английской раскладке). Этой же комбинацией можно превратить выделенную область текста в таблицу.
На запрос 'Table size Columns x Rows [e.g. 5x2]:' в минибуфере выбираем размер таблицы — и emacs рисует нам симпатичную таблицу в ASCII:

|   |   |   |
|---+---+---|
|   |   |   |
|   |   |   |
|   |   |   |

Перемещение между ячейками — Tab, Shift+Tab, RET. Перерисовка и выравнивание таблицы происходит при каждом перемещении или по С-с. Заполненная таблица выглядит примерно так:

|           ip | description          | users |
|--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.12 | Касса1               |     1 |
| 192.168.0.13 | Касса2               |     1 |

2. Редактирование структуры таблицы

Emacs автоматически добавляет строку, если нажать Tab/RET в последней ячейке.
Добавление столбца выглядит интуитивно, если понимать добавление и удаление столбцов как расширение/сужение таблицы:
Удалить столбец — M-S-Left, добавить — M-S-Right
Удалить строку — M-S-Up, добавить — M-S-Down

Перемещение колонки влево/вправо — M-Left / M-Right. По аналогии, перемещение строки вверх/вниз: M-Up/ M-Down

3. Оформление и выравнивание таблицы

Если в начале первой ячейки поставить минус, emacs дорисует горизонтальную линию:

|           ip | description | users |      |           ip | description | users |
|--------------+-------------+-------|      |--------------+-------------+-------|
| 192.168.0.11 | Бухгалтерия |     2 |      | 192.168.0.11 | Бухгалтерия |     2 |
| 192.168.0.12 | Касса1      |     1 |      | 192.168.0.12 | Касса1      |     1 |
| 192.168.0.12 | Касса1      |     1 |      | 192.168.0.12 | Касса1      |     1 |
| 192.168.0.14 | Приёмная    |     2 |      | 192.168.0.14 | Приёмная    |     2 |
|-             |             |       |   => |--------------+-------------+-------|

Выравнивание таблицы происходит автоматически, но можно и указать фиксированную ширину для столбца — задав число в треугольных скобках в любой ячейке этого столбца:

|           ip | description                     | users |     |           ip | description          | users |
|--------------+---------------------------------+-------|     |--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия                     |     2 |     | 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.12 | Касса1                          |     1 |     | 192.168.0.12 | Касса1               |     1 |
| 192.168.0.13 | Касса2                          |     1 |     | 192.168.0.13 | Касса2               |     1 |
| 192.168.0.14 | Приёмная                        |     2 |     | 192.168.0.14 | Приёмная             |     2 |
|--------------+---------------------------------+-------|     |--------------+----------------------+-------|
|              | Число пользователей компьютеров |       |  => |              | Число пользователе=> |       |
|              | <20>                            |       |     |              | <20>                 |       |

Слишком длинные ячейки укорачиваются и помечаются знаком =>, такие ячейки можно редактировать по C-c ` в отдельном буфере, по окончании редактирования — нажать C-c.

4. Функции в таблице

Суммирование

C-c + суммирует все числа в колонке, а С-y вставляет результат в текущую ячейку:

|           ip | description          | users |
|--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.12 | Касса1               |     1 |
| 192.168.0.13 | Касса2               |     1 |
| 192.168.0.14 | Приёмная             |     2 |
|--------------+----------------------+-------|
|              | Число пользователе=> |     6 |
|              | <20>                 |       |

Сортировка

C-c ^ позволяет отсортировать строки между двумя горизонтальными линиями по текущему столбцу. На запрос в минибуфере можно выбрать: а — алфавитная сортировка, n — цифровая, t — по времени, A/N/T — соответственно, обратная сортировка:

|           ip | description          | users |     |           ip | description          | users |
|--------------+----------------------+-------|     |--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия          |     2 |     | 192.168.0.12 | Касса1               |     1 |
| 192.168.0.12 | Касса1               |     1 | =>  | 192.168.0.13 | Касса2               |     1 |
| 192.168.0.13 | Касса2               |     1 |     | 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.14 | Приёмная             |     2 |     | 192.168.0.14 | Приёмная             |     2 |
|--------------+----------------------+-------|     |--------------+----------------------+-------|

Повторение предыдущей строки

S-RET копирует содержимое ячейки в следующую, а если текущая ячейка пуста — из предыдущей. Работает автоинкремент. Чем-то похоже на растягивание выделения в Excel (если не ошибаюсь, оно называется автозаполнение):
|           ip | description          |        |           ip | users |
|--------------+----------------------|        |--------------+-------|
| 192.168.0.11 | Бухгалтерия          |        | 192.168.0.13 |     1 |
| 192.168.0.11 |                      |        | 192.168.0.14 |     2 |
| 192.168.0.11 |                      |        |              |     3 |

5. Заключение

Описанные возможности покрывают большинство базовых потребностей в таблицах. После данного экскурса можете смело удалять свой Calc/Excel и полностью пересаживаться на Emacs ;)

Ещё можно почитать по теме мануал по таблицам в org-mode.

upd1. Добавил про сортировку и повторение предыдущей строки
Tags:
Hubs:
+12
Comments4

Articles