Вы неправильно настраиваете Emacs: не пытайтесь сделать из него что-то другое

ce80c3b709981f2cb8dc334f4599fa1a

Игра говно, зделана тупо. Не могли сделать всё как в crusis

Написать этот пост меня побудил комментарий в канале «Технические писатели»:

Я вашу книгу читал и на рабочем ноуте у меня какое-то время EMACS стоял. Но я честно скажу — так и не осилил его внедрение в повседневное использование. Еще лет пять назад я бы с удовольствием стал собирать под себя редактор, а вот сейчас как-то хочется просто взять и работать, попутно что-то настраивая при необходимости.
Я долго думал, что мне вообще нужно от редактора, и кажется, что практически любой широко распространенный в индустрии редактор отвечает моим требованиям. Какой-то больше, какой-то меньше, но в целом я так и не смог самому себе продать супер кастомную сборку редактора.
При этом риск отказа от поддержки привычных инструментов есть, тот же Atom создатели в итоге решили закопать и разработали вместо него редактор Zed (мне понравился, кстати)

Сейчас разберём, что же не так с GNU Emacs, и почему многие бросают его, даже толком не разобравшись.

Начну издалека, с 2009 года. Я тогда был студентом, и чтобы питаться не одним дошиком, устроился в «скорую компьютерную помощь». На некоторых заявках я видел широко раскрытые от удивления глаза, когда люди узнавали, что компьютеры требуют технического обслуживания: замены термопасты, чистки от пыли, удаления временных файлов, проверки файловой системы и так далее. На одной из заявок я услышал (не дословно) такое:

«Офигеть! Мы за него отдали аж 30 000 рублей, а его, оказывается, ещё и обслуживать надо!»

Когда люди покупают BMW или Lexus в салоне, они понимают, что сколько бы автомобиль не стоил, он требует бензина, замены масла, чистки фильтров, подкачки шин и прочего ТО. Но вот с компьютерами почему-то работает «магическое мышление»: если эта штука стоит так дорого, то она должна (что именно — каждый понимает по своему, но в минимальный набор часто входит отсутствие ТО).

Что я последние много лет наблюдаю в сообществах программистов, технических писателей, DevOps, админов-эникейщиков и других пользователей разных интернет-ресурсов (и Хабра в том числе!), желающих начать использовать GNU Emacs? А наблюдаю я жалобы на то, что GNU Emacs не такой, как им бы хотелось.

Главная проблема GNU Emacs — вовсе не высокий порог вхождения (у VIM и Neovim он значительно выше), не неоптимальные настройки по умолчанию (поверьте, бывает хуже), не «тормознутость» (ха-ха, ну давайте сравним нативную сборку GNU Emacs под GTK с Electron в вашем любимом Atom / VS Code / Zed).

Главная проблема GNU Emacs — неадекватные ожидания пользователей.

Допустим, вы хотите научиться пользоваться VIM. Вы идёте на StackOverflow и ищете ответ на вопрос «How to exit VIM?», и сразу же узнаёте, что надо нажать [ESC], ввести :q! и нажать [Enter]. Потом вы узнаёте, что VIM по умолчанию запускается в режиме перемещения по тексту, а для работы с ним нужно нажать клавишу [i]. И всех это устраивает, потому что вы понимаете — VIM требует обучения.

Вы запускаете GNU Emacs, и он значительно дружелюбнее — сразу же даёт вводить текст, не требует переключения режимов, и для выхода достаточно нажать [Ctrl+x c]. И вы сразу думаете: «О, да это же обычный редактор! Очень круто! Как тут ставить плагины?»

И вот тут начинаются проблемы. Когда вы запускаете VS Code / Atom / Sublime Text версии 3+ / Zed, они, как правило, добры к вам, и дают если не GUI, то хотя бы какие-то подсказки, позволяющие делать нужные настройки и устанавливать все игры расширения / дополнения / плагины.

GNU Emacs в этом отношении жесток к новичкам: он требует чтения документации и обучения. То, что некоторые сочетания клавиш в нём по умолчанию работают так же, как в других редакторах — большая проблема. Это создаёт у вас ложное ощущение того, будто вы понимаете, что происходит, и будто вы знаете, как работать с редактором.

Боюсь, это очень, очень сильно не так. Вы, конечно, можете включить cua-mode, и тогда [Ctrl+C], [Ctrl+V] и [Ctrl+X] у вас будут работать так же, как в нормальных редакторах. Однако, это не решение проблемы.

Признайтесь: вы просто не хотите тратить время на обучение. Да, в GNU Emacs сочетания [Ctrl+C] и [Ctrl+W] делают не то, что вы привыкли. Ещё хуже то, что [Ctrl+C] и [Ctrl+c], а также [Ctrl+W] и [Ctrl+w] в нём — это совершенно разные сочетания клавиш. Дополнительно скажу, что в GNU Emacs есть такая штука как последовательности клавиш (key sequences), которые в других программах встречаются очень редко. Но это не проблема, если вы любите видеоигры — если вы хоть раз выбивали комбо, то можете считать что последовательность клавиш — это именно комбинация.

А стоит ли вообще тратить время на изучение GNU Emacs, раз он так требователен к пользователю?

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

Если вы хотите иметь под рукой текстовый редактор с функциями IDE, то GNU Emacs — идеальный выбор по следующим причинам:

  • GNU Emacs уже много лет, и за это время он пережил не один десяток других редакторов и IDE. Скорее всего, в ближайшие годы он переживёт их ещё немало. Это значит, что ваше время, потраченное на его освоение и написание init.el, не пропадёт даром.

  • У GNU Emacs отличная обратная совместимость. Вы называете это говном мамонта и legacy. Я называю это стабильностью. Мы не одинаковы.

  • У GNU Emacs отличная документация. Можете ли вы то же самое сказать про свою IDE?

  • GNU Emacs быстр, потому что нативно собирается под большинство широко распространённых платформ. У Sublime Text и VS Code есть поддержка Linux, macOS и Windows. Что насчёт *bsd-систем? HP-OS? Solaris?

  • GNU Emacs — современный редактор, находящийся в активной разработке. Не так давно туда добавили поддержку TreeSitter, Emoji и рендеринг шрифтов с использованием возможностей видеокарты. Как дела у пользователей Notepad++? Что там с TreeEditor (помните такой?)?

Так какая же главная ошибка новичков, желающих перейти на GNU Emacs? Эта ошибка звучит так:

Попытка вместо изучения GNU Emacs подогнать его под свой предыдущий опыт.

Многие вещи в GNU Emacs могут показаться вам анахронизмом. Ну, например, какой дурак решил, что сочетание [Ctrl+a] должно перемещать курсор в начало строки, а не выделять весь текст? А всё очень просто: часто вам приходится выделять весь текст? Я — профессиональный технический писатель, и переходить в начало или конец строки мне приходится гораздо, гораздо чаще чем выделять всё.

Или сочетание [Ctrl+w]. Оно перемещает выделенный текст из буфера в kill-ring. Почему не [Ctrl+x]? Разве так было бы не удобнее? Да, удобнее, конечно, вот только сочетание [Ctrl+c] исторически зарезервировано для начала последовательностей, связанных с функциями основного режима буфера. Прикажете авторам десятков пакетов переписать код только потому, что вам так хочется? А как насчёт десятков и сотен пользователей этих пакетов, которые уже привыкли к этим сочетаниям и последовательностям?

Что ж, достаточно. Может быть, нужно немного критики?

Да, GNU Emacs есть за что покритиковать: высокий порог вхождения, недружелюбность к новичкам, приходится читать документацию, настройки через написание кода в init.el (про customize промолчу)…

Соглашусь с тем, что некоторые настройки по умолчанию в GNU Emacs неоптимальны. Например, часто вы восстанавливаете файлы из резервных копий? Почему desktop-mode не активен по умолчанию?

Поддержка некоторых форматов файлов очень слабая: rst-mode (ReStructured Text), adoc-mode (AsciiDoc), yaml-mode (YAML)…

Подытожив вышесказанное, скажу так: GNU Emacs требует обучения. Вместо того, чтобы вместить его в прокрустово ложе вашего предыдущего опыта, постарайтесь понять его философию и логику разработчиков, и вам сразу станет значительно легче.

© Habrahabr.ru