LINUX.ORG.RU
ФорумTalks

Emacs, VS Code, NeoVim, IntelliJ IDEA... and Emacs

 , , , ,


3

5

В названии, конечно, отсылка к фильму Spring, Summer, Fall, Winter… and Spring.

Обещал накатить вброс по Emacs, ибо как писали постом выше, народ заскучал. Речь идет о продолжении топика Жизнь после Emacs.

Вообще, суть моего мессенжа, пожалуй, точнее всего передает это короткое видео :).

Но если все же попытаться раскрыть суть чуть подробнее. Да, лучше Emacs пока никто ничего не придумал, хотя есть интересные попытки. Никакие элементы архаики, сохранившиеся в Emacs не могут преуменьшить те уникальные преимущества, которых больше нигде нет. Тут дело не в том, что в других редакторах/IDE они хуже или, скажем, они пока недоработанные. Их просто нет.

Итак, в продолжении темы предыдущей серии, я перешел на 1,5 года на VS Code.

Плюсы:

  1. Производительность UI, который рендерится на GPU.
  2. Производительность JavaScript (спасибо Electron/NodeJS/V8).
  3. Вменяемый API.

Минусы:

  1. Не keyboard-centric. Некоторые вещи вообще без мыши не сделать, что раздражает.
  2. Хотите переименовать текущий файл? Вам нужен плагин для этого! В Emacs это была бы просто небольшая функция - кинул в конфиг и всего делов. Тут же 8 плагинов, половина из них заброшена в 2015-м, другая половина помимо необходимой функции добавляет еще 100500 других. Доков нет, докстрингов нет, что кто-то другой будет открывать код плагина и в мыслях не было. Спасибо, если есть ридми, пусть и не обновляемая много лет, и уже не релевантная коду.
  3. Культура разработки. Вне официального кода от Microsoft ее нет (см. выше). Писать плагины на ClojureScript возможно, но не вполне натурально (как проба пера, например advanced-navigation-cljs). Да, есть еще joyride. API неплох, да, но многие вещи гвоздями прибиты и всего не настроишь.

Наверное, основной вопрос в плане конфигурации VS Code по сравнению с Emacs в том, что для Emacs можно было не особо переключаясь из контекста текущей деятельности быстренько перейти в .emacs, что-то там подправить и вернуться к основной задаче. В VS Code флоу совсем иной. Если ты вдруг понял, что тебе нужно что-то доконфигурировать, ты понимаешь, что либо на это нужно просто забить, либо мысленно сказать что-то вроде, «ну что ж, а теперь девочки и мальчики мы все бросаем и осваиваем/вспоминаем специальность «конфигуратор/плагинописатель» для VS Code», ибо быстренько что-то подхачить там не выйдет. Например, тебе дополнительно нужен инстанс среды для тестирования изменений плагина. Плагин дописывается, отлаживается и потом устанавливается в рабочую среду. Если же, ко всему прочему, это не твой плагин (что почти всегда), то нужно понимать, что вникать придется долго, ибо комментариев и докстрингов нет примерно никогда (за исключением собственно описания API от Microsoft).

При этом, всегда надеяться на то, что все будет «просто работать» нельзя. У меня например, после очередного обновления как-то отваливалась Calva (Clojure IDE) и edamagit (Magit for VSCode). Опять же, в Emacs у меня тоже были случаи, когда достаточно мейнстримовые плагины приходили с ошибками после очередного обновления. И в этой ситуации всегда можно быстренько это на лету починить, зарепортить багу или сразу прислать пулрек мейнтейнеру.

По итогу, решил попробовать NeoVim, ибо тоже в теории гибкая расширяемая среда, да и вообще, интересно и полезно из бочки вылезти, посмотреть, что в мире вимеров происходит.

Плюсы:

  1. Производительность UI, для чего делаются отдельно UI клиенты. Я по итогу выбрал neovim-qt
  2. Производительность Lua. Чуть хуже, чем JavaScript, но сильно лучше EmacsLisp. Впрочем, про производительность UI на относительно больших файлах будет ниже оговорка.
  3. Fennel - Lisp, работающий на Lua прекрасен. Это дает в чем-то схожий флоу конфигурации, что и в Emacs, когда поведение меняется на лету (см. подробнее: conjure)
  4. Сопоставимая с Emacs экосистема. Например, Magit (для Emacs), Edamagit (для VSCode) и NeoGit (для NeoVim) работают почти одинаково.

Минусы:

  1. Модальность. Для кого-то это плюс, я ее не люблю. Я настраивал конфигурацию без модальности. Но тут периодически натыкаешься на ограничение возможностей Vim по тонкой настройке.
  2. Менее удобная работа с Fennel, чем то, что предоставляет Emacs для EmacsLisp. На самом деле, они, конечно, не сопоставимы. Т.е. NeoVim не может быть такой же удобной IDE для Fennel как Emacs для EmacsLisp, уже по причине невозможности такой же интроспекции.
  3. Довольно причудливый API, многие вещи прибиты гвоздями еще со времен царя-гороха. Например, для некоторой функциональности нет полноценных функций, которые можно было бы вызвать через API, есть только хоткеи, т.е. приходится эмулировать их нажатие для вызова этих функций. Ситуация прежде всего в NeoVim постепенно меняется к лучшему, но до API Emacs пропасть неизмеримых размеров.

Но вот то, что реально заставило меня отказаться от пути использовать NeoVim и планомерно конфигурировать его в соответствии со своими предпочтениями, это то, что на больших файлах он стал повисать прям конкретно на десятки секунд. В Neovim Qt это очень сильно сказывалось. В Neovide лучше, но там нет антиалиасинга. А хотелось бы. В консольной версии аналогично. Отключил все плагины - ситуация не сильно поменялась. И максимальным шоком стало то, что Emacs с этим файлом спокойно работал. Подвисал, да, но на доли секунд.

Про Lapce и Helix, наверное, пока говорить рано, они довольно экспериментальные еще.

В общем, лучше Emacs пока никто ничего не придумал, хотя есть интересные попытки.



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

Откатись на старую версию?

Да так и сделал, но см коммент выше.

LSP убогий протокол, и самые приемлемые LSP-серверы требуют допила клиента обычно.

Не совсем понял. Естественно, клиент допиливается. У Emacs, насколько я знаю, есть 3 реализации клиентов.

Да вроде наоборот, в emacs уже есть мультикурсор хотя бы?

Сначала хотел написать что-то вроде, «да в Emacs мультикурсор был еще во времена, когда VSCode вообще не было», но потом решил проверить пруфы. И таки, да.

Visual Studio Code Initial release April 29, 2015

Emacs multiple-cursors.el First commit Jan 24, 2012

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

в emacs уже есть мультикурсор

Есть iedit, хотя мне не вполне ясно, зачем он нужен. Ни разу пока не пригодился. Есть замена по регекспу, есть клавиатурные макросы (а в вскоде есть?).

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

Emacs multiple-cursors.el First commit Jan 24, 2012

И все еще куча проблем, даже самых базовых, автор проекта вообще пишет что устал и

«So, I have closed the issue tracker and the pull requests. I hope you can happily use this package, just like I do. If it doesn't work for you, then I'm sorry. Thankfully Emacs is infinitely malleable, you can probably fix it yourself.»

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

Я пользуюсь multiple-cursors.el много лет. Вопросов к плагину нет. Если будет нужно - правильно написал автор, можно будет самому допилить.

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

Joe емнип вообще на нормальных шоткатах.

Ну да, ну да.

Сейчас снова для интереса поставил Joe. Черт возьми, я не смог из него даже выйти! Esc не работает, F10 рисует тиглю, F-клавиши создают новые консоли. В консоли joehelp показывает десяток команд, команды выхода нет. Как вернуться из консоли в режим редактирования - тоже неясно. Esc в консоли ставит какую-то метку. Нажатие Ctrl+C приводит к появлению строки:

Ctrl- (или 0-9 для дес. кода, x - для 16, или o - для 8)

Я не знаю что за люди в Linux пишут текстовые редакторы. Это не для человека.

Joe по своей всратости победил даже vi.

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

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

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

Везде есть проблемы и всегда есть те, кому чего-то не хватает. Я пробовал VS Code - жалкое подобие емакса. И плавный скроллинг - это последнее, чего мне не хватает в емаксе, например (кстати, можно где-то посмотреть пример, как это должно быть?).

Оно? https://www.youtube.com/watch?v=LNK1DnPOqms

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

Не спорю что проблемы есть везде, только в Emacs не хватает большего чем в VSCode.

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

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

должны быть не скачки по строкам а плавный скроллинг

Но зачем? У меня скроллинг вообще через четверть страницы. Помню, в Электронике-УКНЦ был плавный скроллинг. Прикольно, но хз зачем.

только в Emacs не хватает большего чем в VSCode

Сугубо субъективно. Мне в VSCode не хватало большего, значительно большего.

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

Но зачем? У меня скроллинг вообще через четверть страницы.

Ты путаешь плавный скроллинг со скоростью скроллинга, она может быть хоть всю страницу.

Сугубо субъективно. Мне в VSCode не хватало большего, значительно большего.

Оцениваю по трудозатратам на глаз, это если брать программирование на распространенных языках, если нужен org-mode то наверное лучше взять Emacs.

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

Ты путаешь плавный скроллинг со скоростью скроллинга

Так в чём прелесть плавного скроллинга? Я его даже в браузере отключил, потому что зачем тратить время на просмотр анимации?

это если брать программирование на распространенных языках

Я пишу на Verilog/SV, Си, Scheme, немного на питоне и tcl, и по мелочи на всяких башах. Преимущества VSCode не увидел.

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

Так в чём прелесть плавного скроллинга?

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

Verilog, Scheme, Tcl, Bash
Преимущества VSCode не увидел

Верю, не знаю как с этим у Emacs, но думаю хорошо если ты его выбрал.

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

Joe емнип вообще на нормальных шоткатах.

И еще: эти всратые «нормальные» шорткаты не работают на русской раскладке. Для каждого действия надо переключаться на английский язык. Мда, вот уж дерьмище так дерьмище.

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

У меня во всём кроме jupyter vscode кривее эклипса.

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

Ну хз, я его использовал когда-то в линуксах, потому что он на freebsd ee похож.

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

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

Так и запишем, онанист мышиного колеса. Мы же или переходим на строку или пользуемся переходом по поиску или сразу по пол экрана, чтобы быстрее, глядя на total индикатор с процентами, которого в VSCode нет! Есть говно в виде ‘total lines’, корявое и унылое, но хоть что-то.

И если привык работать, то меня, например, выбеживают лаги и низкая отзывчивость интерфейса VSCode на очень мощном железе.

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

masterOf
()

Использую neovim с lazyvim в базе как примерно описано вот тут, проблемы с большими файлами не заметил, хотя может до 10к lines не считается большими.

Obezyan
()
Ответ на: комментарий от Ygor

Ой, я себе ставил, не очень понравилось. Возможно это теперь красиво в Wayland, надо заценить по новой.

Итак, проверил. На данный момент в Sway с wlroots 16.2 при M-x pixel-scroll-precision-mode работает неотличимо от foot и FF. Сессия нативная, PGTK.

Да, в X11 мне пару лет назад не нравилось, теперь вписал в конфиг. С 29 встроено (pixel-scroll-precision-mode 1)

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

Я с этим чувачком переписывался и смотрел его медитавные ролики настройки.

У него интересное приложение, которое нашло свою нишу.

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

Причем тут колесо? У меня плавный и переход через поиск, и другой любой переход в границах одного файла.

И если привык работать, то меня, например, выбеживают лаги и низкая отзывчивость интерфейса VSCode на очень мощном железе.

Лаги Emacs намного сильнее в любом случае.

Так как пользуешься, можешь подсказать, как сделать так в VSCode

Я пользуюсь VSCode для просмотра логов максимум.

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

С 28 версии нет. Нативная компиляция - это мощь! Добавлю и минус. Везде есть либа libgccjit, одна Gentoo заставляет пересобирать Gcc с поддержкой jit, что неприятно.

Я пользуюсь VSCode для просмотра логов максимум.

Запишем, житель IDE.

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

Так ты старая обезьяна. Хоть не облезаешь?

ТСу

В общем, лучше Emacs пока никто ничего не придумал, хотя есть интересные попытки.

@Kostafey, поделись инфой, как тебе на новой версии Emacs? Используешь ли ты то, что внедрили в него? Как тебе выход новых дополнений, написанных с использованием встроенного API (corfu, vertico, Eglot, Tree-sitter)? Стало ли тебе удобнее? Быстрее? Лучше?

masterOf
()
Ответ на: комментарий от Ygor

можно ещё добавить

(setq scroll-conservatively 10
      fast-but-imprecise-scrolling nil
      jit-lock-defer-time 0
      redisplay-dont-pause t
      scroll-margin 5)
masterOf
()
Ответ на: комментарий от masterOf

@Kostafey, поделись инфой, как тебе на новой версии Emacs? Используешь ли ты то, что внедрили в него? Как тебе выход новых дополнений, написанных с использованием встроенного API (corfu, vertico, Eglot, Tree-sitter)? Стало ли тебе удобнее? Быстрее? Лучше?

Я не стал изобретать новый конфиг с нуля, просто причесал имевшийся на тот момент.

  • corfu хорош. Правда хорош. Но company быстрее. Ощутимо быстрее. Возможно, это связано с необходимостью создания фрейма у corfu всякий раз при появлении подсказок.
  • vertico - да, сейчас это лучшее из того, что есть. Полностью перешел на нее.
  • Eglot посмотрел, но переключаться не стал, т.к. LSP Mode с отключенными всплывающими UI-элементами меня полностью устраивает.
  • Tree-sitter пока на Emacs не пробовал, в NeoVim использовал. Без нареканий.

В остальном же, переход на Emacs 29 происходит незаметно, пользователь только наблюдает некое ускорение работы и все.

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

Emacs однопоточный, и работа блокирует интерфейс, тут никакое ускорение не поможет.

MOPKOBKA ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)