Личная история любви и ненависти, некоторые функции и то, почему эта замечательная программа стала моим редактором по умолчанию.
Если вы разработчик или просто сторонник открытого исходного кода, вы, вероятно, сталкивались с Emacs. Для глаза неопытного непонятная куча букв в некрасивой раскладке, для опытного офигенный инструмент продуктивности. Это мое личное мнение об этом историческом редакторе и о том, почему я использовал его, перестал использовать и, наконец, сделал его редактором по умолчанию.

Какого черта ты здесь что-то пишешь?
Впервые я увидел что-то под названием Emacs в компьютерной лаборатории еще в 2002 году. Я был совершенно новичком в Linux, и в этой лаборатории я прошел свой первый ускоренный курс. Будучи новичком, мне пришлось написать и скомпилировать файл helloworld.c. Первой задачей было написать код, для этого вам понадобится текстовый редактор. Я не помню, какой дистрибутив был установлен на этих компьютерах, но хорошо помню ужасный UX-опыт, когда я пытался найти текстовый редактор. Помните, я пришел из среды Windows. Я нашел что-то похожее на блокнот Windows, написал код, скомпилировал его с помощью терминала и почувствовал себя хакером после отображения сообщения Hello World! в приглашении терминала.
Когда я снова открыл свой файл helloworld.c, произошло нечто неожиданное. Код был показан мне в редакторе с серым фоном. Не могу сказать, что внешний вид был запоминающимся или красивым. Это был XEmacs, который был редактором по умолчанию в этом дистрибутиве. Дальше… хаос. Во-первых, как мне здесь что-то написать? Я видел, как курсор двигался вверх и вниз, но при наборе текста просто появлялись непонятные сообщения, и вдруг я что-то напечатал. Это текстовый редактор. Почему я не могу просто писать, пока печатаю? окей, это наконец-то сделано. Как мне его сохранить? О, есть кнопка сохранить. Нажмите здесь. Мммм, оно сохранилось? На такую простую задачу я потратил, наверное, больше пяти минут. Это был неприятный опыт. Тем не менее…
Далеко за пределами текстового редактора
По какой-то причине, которую я не могу объяснить (может быть, это садизм?), я начал использовать Emacs ежедневно. Нет нужды говорить, что я продолжал тратить неприлично много времени, пытаясь сделать простые вещи (копирование, вставка, выделение текстовых областей). В любом случае, я помню, что нам приходилось исследовать несколько больших текстовых файлов, и Emacs был единственным редактором, который мог загружать файлы и искать фрагменты текста, не перегружая память. Очевидно, я понятия не имел о существовании grep или awk. Самым озадачивающим для меня открытием было то, что внутри Emacs есть игры. Несколько примеров здесь.
Emacs с архитектурной точки зрения представляет собой нечто большее, чем простой текстовый редактор. Есть интерпретатор Лиспа. Собственно, диалект LISP называется Emacs Lisp (Элисп). Большая часть функциональности написана на этом диалекте, а остальная часть — на C. Это означает, что вы можете легко портировать свои скрипты на другие машины без перекомпиляции.
Emacs ужасно настраиваемый. У вас есть свобода настроить все. Полная свобода. Все можно изменить и все можно настроить. Если вы начнете играть со своим файлом init.el, вы можете попасть в бесконечный цикл. Хуже всего копировать и вставлять чужие решения определенных проблем, например, использовать CTRL+c и CTRL+v вместо загадочного ярлыка, использовать более крупные шрифты, использовать другой причудливый макет… Вы поддерживаете этот файл годами, и он продолжает расти и расти. А поскольку вы все скопировали и вставили, угадайте что… Вы понятия не имеете, как это работает и для чего это было нужно. Поэтому вам нужно начать обращать внимание и узнавать что-то о том, как все работает. Потому что рано или поздно оно сломается. В каком-то смысле это философия разработчика программного обеспечения. Это не цена, которую каждый заплатит за использование текстового редактора.
Вы можете сделать все в одном месте
Вы можете сделать всё (или почти всё) ТОЛЬКО с помощью Emacs. Я не преувеличиваю. Вы можете отправлять электронную почту, проверять ветки GIT, компилировать файл LaTex, отображать файл PDF, запускать терминалы, запускать свою собственную повестку дня… Все в одном и том же месте. Я уже упоминал, что есть подсветка синтаксиса или выпадающие предложения? Вы можете найти опытных разработчиков, использующих Emacs в качестве единственного инструмента. Содержимое буфера, которое появляется и исчезает после «секретных» комбинаций клавиш, отображающих то и это. Некоторые пользователи могут быть чрезвычайно эффективными и использовать потрясающие конвейеры в своих повседневных задачах. Через сколько лет использования Emacs? Бог знает.
Клиент-серверная архитектура
Немногие знают об этом, но Emacs может работать в режиме сервер-клиент. Это интересно по двум причинам. Во-первых, вы можете запустить Emacs в качестве сервера при загрузке вашего компьютера. Теперь вы можете запускать клиенты, подключающиеся к этому экземпляру, и вам не нужно ждать загрузки пакета. Во-вторых, это может быть интересным вариантом, если вы хотите иметь машину только для разработки/вычислений. Изображение подключается с вашего ноутбука с помощью Emacs к серверу на этом компьютере и работает как обычно. Особенно полезно, если вы разрабатываете на другой платформе, кросс-компиляция невозможна.
Больше функциональности за счет добавления пакетов
У Emacs нет торговой площадки, как у других решений, таких как VSCode или JetBrains IDE. В этом случае Emacs полагается на MELPA (архив пакетов Emacs Lisp от Milkypostman) в качестве основного источника курируемых пакетов. Вы можете напрямую установить их и запустить на своем работающем экземпляре. Очевидно, это не так необычно, как рынок плагинов, но это ближе к менталитету разработчиков.
40 лет истории!!!
Это был первый релиз GNU, сделанный еще в 1985 году самим Ричардом Столлманом. Это почти 40 лет!!! Код, который мы имеем сегодня, отличается от оригинального релиза, но суть всё та же. Вы представляете, что используете VSCode или JetBrains в течение 40 лет? Тушэ.
Режим организации
Для меня это одна из главных причин использовать Emacs. Режим организации представляет собой простой текстовый формат, который довольно легко изучить, но он обладает достаточной описательностью для выполнения таких задач, как ведение повестки дня, отображение и отображение результатов кода и многие другие. Что-то вроде:
#+begin_src python import random return [random.random() for i in range(5)] #+end_src
Он будет не только красиво раскрашен, его также можно будет интерпретировать, а результат будет отображаться в режиме онлайн, как в каком-то блокноте Jupyter.
#+RESULTS: | 0.9802045044675929 | 0.7814182240285613 | 0.7945518565001365 | 0.7875101844790451 | 0.999364766119846 |
Существует большое количество пакетов, которые позволяют экспортировать из режима организации в другие форматы, такие как HTML, Markdown, LaTex, ODT, RevealJS и т. д. Это в сочетании с определением конвейеров может быть чрезвычайно полезно для тех, кто работает над контентом. для этого требуется перейти в разные целевые форматы.
Здесь практически невозможно охватить все возможности, но если вам интересно, вы можете взглянуть на официальную документацию. Там вы можете найти несколько примеров того, что люди делают в режиме организации. Тем временем вы можете проверить некоторые текущие функции.
Кривая обучения
Если вы дочитали до сих пор, вы, вероятно, заметили, что Emacs нелегко изучить. Это займет время. И много разочарований. Основная проблема связана с UX. Emacs в основном разработан для использования с клавиатурой, хотя мышь поддерживается. К сожалению, чтобы понять и запомнить сочетания клавиш, требуется время. Это скорее повторяющийся процесс, чем чистое упражнение на запоминание. Такие понятия, как буферы или режимы, являются странными вещами для изучения тем, кто хочет сесть и начать печатать.
Если вы разработчик и хотите внести свой вклад или просто написать свою собственную программу, вам придется изучить Emacs Lisp. Это не широко используемый язык, поэтому вам, вероятно, придется выучить что-то новое.
Некоторые исторические жалобы
Многие пользователи публично жалуются на то, что Emacs кажется неуклюжим, особенно по сравнению с современными IDE. И они, вероятно, правы. Хотя я должен сказать, что с момента моего первого контакта с этим программным обеспечением оно значительно улучшилось. Тем не менее, нам все еще предстоит крутая кривая обучения.
Как я упоминал ранее, Emacs основан на Lisp, и это уменьшает количество разработчиков, желающих разрабатывать новые функции. Было предложено поддерживать другие языки, такие как Javascript. Однако сам Столлман ясно дает понять, почему Javascript в данный момент не приветствуется. Наконец, тот факт, что Emacs является однопоточным, является большим ограничением по сравнению с другими решениями. Тем не менее, если вы посмотрите на объем памяти, вы, вероятно, примете Emacs и проигнорируете это ограничение.
Полезные платформы Emacs
Хотя Emacs полностью настраиваемый и уже существует хорошая документация для запуска собственного стандартного Emacs, существующие платформы просто сэкономят вам много времени и усилий. Я упомяну только два из них:
- spacemacs создан для того, чтобы помочь пользователям единообразно выполнять все команды Emacs.
- Doom Emacs — это еще один уже настроенный Emacs с большим количеством тщательно подобранных пакетов.

Когда начать?
Самое первое — установить его. Имеются установочные пакеты для всех дистрибутивов и платформ. Если вы ищете книгу, Освоение Emacs может быть хорошим (но дорогим) вариантом. Если вы хотите узнать больше об Emacs Lisp, прочтите официальный документ Введение в программирование на Emacs Lisp.
Если вам больше нравятся видеоуроки, на YouTube есть несколько хороших ресурсов. Вот мои рекомендации:
- Полное руководство по Emacs для начинающих содержит все необходимое для понимания основных концепций.
- Основы организационного режима — это прекрасное изложение того, как работает организационный режим.
- На DistroTube есть список видеороликов о настройке Emacs. Это стоит первым в списке.
Наконец, вы можете найти энтузиастов Emacs на StackExchange или Reddit.
Заключение
Emacs — это редкость в экосистеме программного обеспечения. Сообщество поддерживает и развивает его уже почти 40 лет. Это потрясающий инструмент, требующий сложного обучения, который может привести к разочарованию пользователей. Поздравляем тех, кто уже принял Emacs в качестве своего основного инструмента программирования. Для тех, кто забыл о звере, дайте ему вторую попытку. А для тех, кто понятия не имеет, что это такое, попробуйте, используя одну из существующих платформ.
Для меня он стал редактором по умолчанию. Это не значит, что я не буду использовать какой-либо другой инструмент. Это означает лишь то, что Emacs — мой базовый уровень, и я буду сравнивать каждое решение с этим программным зверем.
Спасибо за прочтение.