Вы неправильно настраиваете Emacs: не пытайтесь сделать из него что-то другое
Игра говно, зделана тупо. Не могли сделать всё как в 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 требует обучения. Вместо того, чтобы вместить его в прокрустово ложе вашего предыдущего опыта, постарайтесь понять его философию и логику разработчиков, и вам сразу станет значительно легче.