LINUX.ORG.RU
ФорумTalks

Жизнь после Emacs

 , , , ,


2

3

Краткое содержание предыдущих серий: 12 лет на Emacs.

Нынешняя ситуация: использовал Emacs для работы со Scala (через lsp-сервер Metals). Проблема известная - подвисание UI. Большую часть lsp-ui я уже отключил, стало возможно как-то работать, но все же буквы появляются из-под клавиш весьма не спеша… Частично решается только апгрейдом железа.

Есть попытки как-то решить проблему - прикрутить Webrender использующий GPU, но пока в очень экспериментальном виде:

А посему решил наконец вылезти из бочки и попробовать VSCode. Пока я на нем всего пару дней, надеюсь, дальше дело пойдет лучше.

Сразу ремарка по поводу Neovim: насколько я понял, реактивный UI они сделали, но я не люблю режимы. Идея повесить все хоткеи на один режим и расширять редактор в Lua была, но насколько это будет натурально: использование Vim-а без режимов?

Light Table, насколько я понял, более-менее заброшен. Впрочем, с их подходом Data-driven configuration, они могли использовать для конфигурации условный FortranJS вместо ClojureScript (надеюсь, понятно почему :)).

Собственно к VSCode. В продолжении тем:

Вот, например, по первой ссылке автор испытывает только положительные чувства от смены Emacs на VSCode. У меня это такого дикого и безоговорочного энтузиазма не вызывает.

Да, конечно, проблемы рендеринга UI там нет как класса. V8 js engine сам по себе демонстрирует шикарную производительность, уже только он шустрее движка Elisp, UI в своем потоке, а главное он наконец-то рендерится GPU, а не CPU. Ок, замечательно, я переместился в будущее: из середины 70-х в наши дни.

Но проблема в том, что в нем нет… Emacs, нет REPL (и я сейчас не про этакую интерактивную командную строку говорю, а про то, что в Emacs все есть REPL - встаешь курсором (точкой) на любом куске кода, выполняешь его, получаешь результат и мгновенно меняешь поведение редактора). И нет s-выражений.

Взять конфигурацию. Вот я редактирую свою тему. Что-то поменял. В Emacs я просто исполняю файл с темой и все - все изменения мгновенно отображаются. Тут у нас что: https://stackoverflow.com/questions/44390765/vscode-how-to-reload-theme-after-editing-its-style Нужно перезагружать редактор? Да ладно? Вообще-то после Reload Window lsp-server тоже перезапускается, ага заново частично компилирует, индексирует.

Далее, хочу M-x function-name. Ну казалось бы, в VSCode такое точно есть. А вот и нет. Хочешь вызвать функцию - назначь ей или алиас или кейбиндинг: https://stackoverflow.com/questions/58382100/triggering-commands-by-their-command-id-or-a-custom-string-alias

Теперь что до файла конфига. Да, изменения в конфиге подхватываются на лету, но для случая симлинков (вот хочется мне конфигурацию в одном месте держать) это работает только если открыт симлинк, а не файл, а не на который он ссылается, а значит гитовый плагин не видит диффа. Ну ладно, допустим. А если у тебя открыто несколько… фреймов, хорошо, окон редактора, например для случая 2-х мониторов, то нужно в каждом открывать конфиг, типа «изменять» его и сохранять, чтобы изменения подхватились. Ну ладно, хоть что-то. Аналогично с темой.

Конфиг статический, код туда не запихнешь. Гм. В Emacs некоторые плагины так и появлялись, что с какими-то функциями сначала играются в .emacs, далее они унифицируются, появляются пакеты, а потом эти пакеты вообще принимают в апстрим Emacs. На самом деле, я считаю это одним из самых главных достоинств Emacs. Тут этого нет. Надо полагать, что-то подобное можно воспроизвести через кастомный плагин.

К слову, пример плагина на ClojureScript внушает некоторый оптимизм на тему дальнейших возможностей расширений и кастомизаций «как в Emacs»: https://github.com/Saikyun/cljs-vscode-extension-hello-world Правда, насколько я понимаю, ClojureScript по-прежнему не может обойтись без Java, т.к. компиляция макросов происходит в JVM. Проект Lumo выглядит заброшенным. Альтернативы есть?

Вообще, я не сильно люблю статическое созерцание кода. Гораздо удобнее, когда код можно изменять на лету, вылепливая из него что-то как из пластилина и тут же получая результат. И речь не только о собственно конфигурации Emacs. На самом деле, в Emacs, я мог, например, в текстовом выхлопе какого-то генератора вертикально выделить столбик, скопировать его, поставить вверху и внизу скобочку, нажать C-x C-e и получить сумму:

(+ 23,32
-7,04
135,7
-15,22
8) => 144,76

Все. Никуда не выходя из Emacs. В VSCode что? Есть некий плагин eval. Судя по времени выполнения, он запускает nodejs всякий раз. Словом, к возможности тут же вычислить любой объект как код на Elisp привыкаешь очень сильно.

Смотрим на расширения. О культуре разработки, сложившейся в Emacs комьюнити я ужи писал на лоре, но на этот вопрос по прежнему не обращают внимания. Пакет Emacs для того попасть с MELPA проходит код ревью. В итоге, мы имеем докстринги к большинству функций, подробные readme. Да и даже без код ревью люди просто привыкли так писать, это уже стало хорошей традицией. Что в VSCode? Даже у некоторых более-менее популярных пакетов нет ни одного комментария, ни одной докстроки к функции в исходном коде. В менее популярныйх пакетах - спасибо, если есть readame, а от бывает и его нет.

P.S. Пока складывается впечатление, что я снял свой старенький экзоскелет и взял вместо него каменный топор. Да, экзоскелет был старенький, ржавый, и краска облезла, и скрипел весь, и гидравлика протекала, и проводка искрила и коротила, местами была обильно замотана изолентой, некоторые болты были жевачкой прилеплены, чтобы не отвалились и потерялись, некоторые вообще приварены. Там что-то приходилось периодически чинить, подкручивать, приклеивать ;). Но в нем можно было и дом перепрыгнуть и машину поднять и нашествие пришельцев, при необходимости, остановить. А каменный топор, да из обсидиана, да со стразиками, да с удобной сенсорной панелью на рукоятке, да с авианосцем в комплекте, но все же не то. Вот теперь сижу и думаю как его доработать напильником до звездолета.

P.P.S. Да, я понимаю, что весь мир не обязан быть Emacs-ом, но ведь люди уже переходили из Emacs и не вчера, наверняка эти проблемы уже как-то решились. Какие-то сушествуют решения, рекоммендации, комьюнити?

P.P.P.S Вот так и представляю себе группу психологической поддержки, тех кто ушел из Emacs. Захожу в комнату, там в форме круга расставлены стулья, на них сидят такие же бывшие емаксеры. Я говорю: «Привет, меня зовут Костя и я перестал пользоваться Emacs.» и все такие: «Привет, Костя». :))))))))



Последнее исправление: Kostafey (всего исправлений: 2)

Ответ на: комментарий от ptarh

Прыготня по редакторам не конденсируется в какие-то ценные скиллы и знания, тем более если мы говорим о тяп-ляп редакторе на электроне.

Ну как… сначала освоил Emacs Lisp, за ним Clojure и, в меньшей степени, ClojureScript, с ними функционально программирование пришло, а там уж и Scala следом подтянулась… ;)

Kostafey
() автор топика
Ответ на: комментарий от ptarh

осилил бы жабаскрипт/ТS и… дальше все печально :)

Да тут как сказать…;) нынче они чуть ли не самые востребованные, судя по вакансиям :).

Kostafey
() автор топика
Последнее исправление: Kostafey (всего исправлений: 1)
Ответ на: комментарий от Kostafey

Ну если хочется пилить фронтэнд на галере, то да, но это отдельный разговор :)

ptarh ★★★★★
()

Каюсь, тред пока не читал - gccemacs предлагали? И ещё чтоб два раза не вставать - в DoomEmacs так же тормозит? Я как то попробовал их сборку и обалдел, при переходе с самописного конфига казалось что я nano запустил.

psh ★★
()
Ответ на: комментарий от Kostafey

Да, фактически это Remacs и Emacs-ng. Но там не слишком большое комьюнити разработчиков.

3.5 хипстера, остальным не нужно.

Meyer ★★★★★
()
Ответ на: комментарий от snizovtsev

tree-sitter заглох.

Ну Neovim впиливает к себе поддержку tree-sitter, может чуток оживет от наплыва новых людей. Хотя в текущей версии, качество подсветки кода у tree-sitter не очень. Я сначала обрадовался, когда начали tree-sitter впиливать в Neovim, недавно попробовал эту фичу с neovim из мастера и приуныл обратно.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от psh

gccemacs предлагали

Нет, но есть сомнения, что оно будет активно поддерживаться и вообще весь существующий код на Elisp будет корректно работать. Опять же, я не пробовал.

И ещё чтоб два раза не вставать - в DoomEmacs так же тормозит?

Не знаю, но это и не важно. Мне нужен <свой> конфиг, да его можно оптимизировать, но это не решает проблему.

Kostafey
() автор топика
Последнее исправление: Kostafey (всего исправлений: 2)
Ответ на: комментарий от Meyer

3.5 хипстера, остальным не нужно.

Вот в этом-то и все дело.

Kostafey
() автор топика
Последнее исправление: Kostafey (всего исправлений: 1)
Ответ на: комментарий от Kostafey

Нет, но есть сомнения, что оно будет активно поддерживаться и вообще весь существующий код на Elisp будет корректно работать. Опять же, я не пробовал.

Я перелез в начале года, самописный конфиг завёлся без проблем. Уже есть поддержка windows, вроде как планируют включить в основную ветку к релизу 28. Наверное надо было пояснить - это не новый Emacs, это just-in-time компиляция elisp кода.

Не знаю, но это и не важно

Идея в другом - если там всё работает нормально, значит можно свой конфиг подпилить. Если производительности Doom не хватит, тогда уже чемодан apt-get vscode.

*UPD* Пролистал тред - gccemacs и native-compiler это одно и тоже, так что получается уже советовали.

psh ★★
()
Последнее исправление: psh (всего исправлений: 1)
Ответ на: комментарий от psh

Наверное надо было пояснить - это не новый Emacs, это just-in-time компиляция elisp кода.

А, так это не форк, а апстрим. Понятно. Будем ждать релиз.

Идея в другом - если там всё работает нормально, значит можно свой конфиг подпилить.

Я проще делаю: emacs -q, потом руками подгружаю строго необходимые пакеты и так тестирую. Мне этого все равно не хватает в плане отзывчивости UI. Впрочем, железо у меня старое. На более новом железе пробовал свой конфиг - там все нормально, по крайней мере, в терминологии «относительной нормальности» Emacs.

Kostafey
() автор топика
Ответ на: комментарий от Kostafey

Нет, но они исчезают при отключении lsp

lsp это писец какой тормоз. Не знаю в emacs или вообще, но я его выкинул к чертям собачим. Сижу по-дидовски на тегах, или даже тупо helm-ag. Всё равно в коде порой такие сопли-макароны встречаются, что никакой lsp это не может прожевать, так что дидовский grep рулит.

no-such-file ★★★★★
()

Нужно перезагружать редактор?

Встроенные схемы миенятся безе перезагрузки.

Хочешь вызвать функцию - назначь ей или алиас или кейбиндинг

А F1 и затем название - не то?

grim ★★☆☆
()
Ответ на: комментарий от Kostafey

В 2007-2008, когда я на него переходил была Visual Studio по-моему 2005, она была заточена под C++,С# и вижуал барсик. А мне нужна была Java

Я пиратской idea пользовался в 2004-м,если склероз меня не подводит. А твоё развитие пошло куда-то не туда.

pinus_nigra
()

На самом деле, в Emacs, я мог, например, в текстовом выхлопе какого-то генератора вертикально выделить столбик, скопировать его, поставить вверху и внизу скобочку, нажать C-x C-e и получить сумму

Нихсебе, а я и не знал такова. Джвадцать лет емаксом пользуюсь.

yvv ★★☆
()

P.P.P.S Вот так и представляю себе группу психологической поддержки, тех кто ушел из Emacs. Захожу в комнату, там в форме круга расставлены стулья, на них сидят такие же бывшие емаксеры. Я говорю: «Привет, меня зовут Костя и я перестал пользоваться Emacs.» и все такие: «Привет, Костя». :))))))))

Костя вернись! Нам было с тобой хорошо :)))))

yvv ★★☆
()
Ответ на: комментарий от grim

Встроенные схемы миенятся безе перезагрузки.

Может быть. Я посмотрел на то что есть и начал переносить свою Емаксовую.

А F1 и затем название - не то?

И да и нет. Если есть алиас - он функцию найдет. Но вот, например, такую функцию вызвать таким образом нельзя: editor.action.smartSelect.grow.

Kostafey
() автор топика
Ответ на: комментарий от pinus_nigra

Я пиратской idea пользовался в 2004-м,если склероз меня не подводит.

В 2004-м я кроме ObjectPascal/Delphi, да еще, пожалуй, турбо барсика ничего не знал :).

А твоё развитие пошло куда-то не туда.

Да все норм. И Идеями я пользовался, и Эклипсами, и Нетбинсами. Вопрос не в этом. У меня цель настолько глубокой настройки среды под себя, чтобы она понимала буквально в каком настроении я нажимаю на клавишу и соответствующим образом реагировала (шучу, конечно, но лишь отчасти ;)). На самом деле, этого реально удалось добиться в Emacs.

Kostafey
() автор топика
Ответ на: комментарий от Kostafey

Может быть. Я посмотрел на то что есть и начал переносить свою Емаксовую.

Я уже много лет назад понял, что дeлать все под себя - бессмыссленная трата времени.

Нужно только то, без чего реално нельзя работать.

Тогда проще переключаться на новом месте.

А мне как контрактору (по вашему фриланс) приходится это делать иногда 3 раза в год.

И жизнь стала лучше ;) Перестал страдать по мелочам.

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 2)
Ответ на: комментарий от yvv

Нихсебе, а я и не знал такова. Джвадцать лет емаксом пользуюсь.

Шутите, да? Вы еще скажите, что никогда символьно интегралы в Emacs не вычисляли ;)

http://kostafey.blogspot.com/2009/05/emaxima-emacs-maxima-emaxuma-auctex_3152.html

(извиняюсь за стилистику, заметка от 2009 года)

Kostafey
() автор топика
Ответ на: комментарий от yvv

Костя вернись! Нам было с тобой хорошо :)))))

Ну продолжая аналогию с комнатой психологической реабилитации бывших емаксеров, сижу я значит вместе со всеми, слушаю наставления, а сам в это время в телефоне: https://github.com/emacs-ng/emacs-ng/issues/138

Kostafey
() автор топика
Ответ на: комментарий от grim

Нужно только то, без чего реално нельзя работать. Тогда проще переключаться на новом месте. А мне как контрактору (по вашему фриланс) приходится это делать иногда 3 раза в год. И жизнь стала лучше ;) Перестал страдать по мелочам.

Ну да, это скорее из области психологии. Меня покусали перфекционисты.

Kostafey
() автор топика

в Emacs все есть REPL - встаешь курсором (точкой) на любом куске кода, выполняешь его, получаешь результат и мгновенно меняешь поведение редактора).

Как часто ты этим пользуешься? Потому что я на имагзе это не делал ни разу.

В общем-то, выбора у тебя немного. Либо дальше пердолиться с емаксом, вставать курсором на коде и менять поведение редактора; либо использовать какой-нибудь нормальный редактор с нормальным поведением, которое уходит в фон и позволяет сосредоточиться на собственно работе. Иными словами, хватит фетишировать инструменты.

Алсо, обратной стороной вот этого вставания курсором является то, что когда я гуглил решение какой-либо моей проблемы с емаксом, самым частым результатом был какой-нибудь пост в духе «я тут немного накостылял, вставь себе вот это в init.el» и дальше полэкрана елишпа.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 3)
Ответ на: комментарий от hateyoufeel

самым частым результатом был какой-нибудь пост в духе «я тут немного накостылял, вставь себе вот это в init.el»

Потом «вот это» превращается в «пару функий», а ещё через некоторое время «нагуглил» в «написал», и всё становится совсем хорошо. Емакс, как и вим, сделан для любителей пердолиться с редактором. Это как жаловаться что на велосипеде нужно потеть и крутить педали.

psh ★★
()
Ответ на: комментарий от Kostafey

У меня цель настолько глубокой настройки среды под себя

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

pinus_nigra
()
Ответ на: комментарий от psh

Емакс, как и вим, был сделан во времена, когда пакетных менеджеров не изобрели ещё. Да и интернеты тоже. Плохо то, что многие фанаты этих редакторов так там и остались. Поэтому пользователи с емакса и бегут.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Как бы в емаксе уже сто лет централизованный репозиторий с пакетами, ставь не хочу. M-x package-install и вперёд. Про вим не скажу, там кажется всё немного хуже.

psh ★★
()

После emacs-а только на vim(neovim) переходить. Для всех остальных редакторов ты уже нецелевая аудитория.

peregrine ★★★★★
()
Ответ на: комментарий от hateyoufeel

Пользователи бегут с емакса потому что он медленный и сложный. Ну как бегут, некоторые просто умирают/уходят на пенсию, а новые пользователи обходят консоль стороной.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Kostafey

Редактирование Java кода в Eclipse/IBM Rational Developer на моем железе было похоже на просмотр диафильма.

У меня Eclipse на старом Atom двухядерном работает сносно.
Почти все сайты с react.js висят во всех браузерах, а eclipse работает.

Shadow ★★★★★
()
Ответ на: комментарий от hateyoufeel

По ощущениям наоборот, сниппетами лежит в основном всякое легаси которое нужно полутора анонимам, а всякие полезные вещи опакечивают. За последние несколько лет постоянно натыкаюсь - утащил что нибудь прикольное с реддита в конфиг, а через некоторое время уже можно менять на пакет из MELPA.

psh ★★
()
Ответ на: комментарий от Kostafey

А что за железо у тебя, где emacs тормозит? Реально интересно. Тем более, если ты пишешь на java / scala - как они тогда работают со старыми железяками?

alienclaster ★★★
()
Ответ на: комментарий от no-such-file

lsp это писец какой тормоз. Не знаю в emacs или вообще, но я его выкинул к чертям собачим.

А если надо в имаксе прогать на java / scala, есть какие-то адекватные варианты кроме lsp?

alienclaster ★★★
()
Ответ на: комментарий от tiinn

Вот такие вот люди переходят с notepad’а на что-то не такое, как у всех, а потом ноют - им, видите ли, неудобно!

В данном случае, скорее, переход на notepad. Да. Неудобно :)

skiminok1986 ★★★★★
()
Ответ на: комментарий от tiinn

Я однажды где-то на форуме читал, там адепт какого-то редчайшего языка писал, что не видит ни смысла, ни преимуществ в C# и Java, ибо на том языке всё делается гораздо удобнее. Кроссплатформенно, СУБД-независимо и т.п. Проблема, что язык давно не поддерживается, во всём мире дай бог 1000 программистов на нём наберётся, всё в их конторе на этом языке написано - и вот как-то так.

Так и запишем: VSCode для javascript-разработчиков %)

skiminok1986 ★★★★★
()
Ответ на: комментарий от no-such-file

lsp это писец какой тормоз. Не знаю в emacs или вообще, но я его выкинул к чертям собачим.

В емаксе. В vscode таких диких тормозов я не встречал. Имагз же вполне может весь процессор сожрать на парсинге lsp.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

А на какой версии пробовали? 27я с native json и микрософотовским сервером для python вполне себе быстрая.

psh ★★
()
Ответ на: комментарий от Kostafey

Guile

Да, фактически это Remacs и Emacs-ng.

Ещё Emacs на Scheme забыли. Но он из трёх самый мёртвый.

Camel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Как часто ты этим пользуешься?

Если честно, постоянно. Что-то периодически донастраиваю, улучшаю. Потом, как калькулятором тоже пользуюсь (о чем писал выше), макросы, multiple-cursors, вертикальное выделение, да много всего.

самым частым результатом был какой-нибудь пост в духе «я тут немного накостылял, вставь себе вот это в init.el» и дальше полэкрана елишпа

Круто же. Готовое решение есть. Творчески его дорабатываешь, адаптируешь к своему конфигу. И profit :).

В моем случае это обычно самописный код. Интроспекция у Emacs великолепная.

Kostafey
() автор топика
Ответ на: комментарий от alienclaster

А что за железо у тебя, где emacs тормозит? Реально интересно.

Emacs+lsp.

Intel(R) Core(TM) i3 CPU M 370  @ 2.40GHz
memory 7789MiB

Тем более, если ты пишешь на java / scala - как они тогда работают со старыми железяками?

Неспешно, но приемлемо.

Kostafey
() автор топика
Ответ на: комментарий от hateyoufeel

В vscode таких диких тормозов я не встречал

Я тоже, но в emacs у меня открыто 300-400 файлов. В vscode максимум 10. Может быть дело в этом?

no-such-file ★★★★★
()
Ответ на: комментарий от alienclaster

в имаксе прогать на java / scala

Я хз, т.к. не пишу на жабе. Но вообще для статики ИМХО теги работают удовлетворительно. Во всяком случае мне как старпёру этого хватает.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Я тоже, но в emacs у меня открыто 300-400 файлов. В vscode максимум 10. Может быть дело в этом?

У меня emacs тормозил вообще на одном файле. Если компиляцию проекта включить фоном через LSP-сервер, то емакс на парсинге выхлопа компиляции выжирал одно ядро процессора и гигабайт-полтора памяти. И это при том, что вывод у меня ни в одном буфере не отображался. Когда я впервые на это наткнулся, честно признаюсь, слегка охренел.

В VSCode у меня обычно десяток-два файлов висят и всё ок.

hateyoufeel ★★★★★
()
Ответ на: комментарий от psh

27я с native json и микрософотовским сервером для python вполне себе быстрая.

А вот её и пробовал. И несколько предыдущих, я долго на имагзе сидел. Только я на хачкелле больше чем на пистоне пишу.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от Kostafey

Потом, как калькулятором тоже пользуюсь (о чем писал выше), макросы, multiple-cursors, вертикальное выделение, да много всего.

Насчёт калькулятора не в курсе, но всё остальное в vscode из коробки.

Но яхз. Если тебе удобно в имагзе, то зачем переезжать на что-то другое? Подобной интроспекции тебе никто больше не даст, потому что она мало кому нужна в принципе. Большинству чуваков, включая меня, достаточно поставить плаги и шоп всё работало, а перехреначивать же редактор под себя как-то не очень тянет.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Если тебе удобно в имагзе, то зачем переезжать на что-то другое?

В какой-то момент начали надоедать тормоза на UI. Все можно понять, простить, но когда нужно ждать появления букв при печати - вот тут-то и решил открыть VSCode.

Kostafey
() автор топика
Ответ на: комментарий от Kostafey

Ну, тебе придётся выбирать: либо интроспекция, либо нормальный UI/UX. Что забавно, кстати, vim workflow легко на другие редакторы накатывается. Я что в emacs, что в vscode использую хоткеи и команды из vim. С Emacs такое не прокатывает, ибо елишп.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.