На хабре уже есть посты про удивительные возможности org-mode — раз, два и три. В этом экскурсе я хочу рассказать ещё об одной возможности, с помощью которой можно пользоваться таблицами в текстовом редакторе (да, я про Emacs) без боли и унижения. А в org-mode таблицы достаточно просты и удобны:
Итак, поехали: активируем org-mode выполнив M-x org-mode RET или открыв файл .org в emacs.
Таблицы создаются просто: C-c | (shift + \ в английской раскладке). Этой же комбинацией можно превратить выделенную область текста в таблицу.
На запрос 'Table size Columns x Rows [e.g. 5x2]:' в минибуфере выбираем размер таблицы — и emacs рисует нам симпатичную таблицу в ASCII:
Перемещение между ячейками — Tab, Shift+Tab, RET. Перерисовка и выравнивание таблицы происходит при каждом перемещении или по С-с. Заполненная таблица выглядит примерно так:
Emacs автоматически добавляет строку, если нажать Tab/RET в последней ячейке.
Добавление столбца выглядит интуитивно, если понимать добавление и удаление столбцов как расширение/сужение таблицы:
Удалить столбец — M-S-Left, добавить — M-S-Right
Удалить строку — M-S-Up, добавить — M-S-Down
Перемещение колонки влево/вправо — M-Left / M-Right. По аналогии, перемещение строки вверх/вниз: M-Up/ M-Down
Если в начале первой ячейки поставить минус, emacs дорисует горизонтальную линию:
Выравнивание таблицы происходит автоматически, но можно и указать фиксированную ширину для столбца — задав число в треугольных скобках в любой ячейке этого столбца:
Слишком длинные ячейки укорачиваются и помечаются знаком =>, такие ячейки можно редактировать по C-c ` в отдельном буфере, по окончании редактирования — нажать C-c.
C-c + суммирует все числа в колонке, а С-y вставляет результат в текущую ячейку:
C-c ^ позволяет отсортировать строки между двумя горизонтальными линиями по текущему столбцу. На запрос в минибуфере можно выбрать: а — алфавитная сортировка, n — цифровая, t — по времени, A/N/T — соответственно, обратная сортировка:
S-RET копирует содержимое ячейки в следующую, а если текущая ячейка пуста — из предыдущей. Работает автоинкремент. Чем-то похоже на растягивание выделения в Excel (если не ошибаюсь, оно называется автозаполнение):
Описанные возможности покрывают большинство базовых потребностей в таблицах. После данного экскурса можете смело удалять свой Calc/Excel и полностью пересаживаться на Emacs ;)
Ещё можно почитать по теме мануал по таблицам в org-mode.
upd1. Добавил про сортировку и повторение предыдущей строки
| 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. Добавил про сортировку и повторение предыдущей строки