LINUX.ORG.RU

Как осуществить мягкий переход с vim на emacs/evil

 , ,


1

5

После очередного dotfiles bankcruptcy (когда решил перенастроить всё как надо с нуля) кинул взгляд в стан Emacs. Посмотрел гифки, скриншоты, плагины и возникло ощущение, что я многое недополучаю в (neo)vim:

  • Emacs as daemon или «буферы отдельно, окна отдельно» - очень нужно для мультимониторной конфигурации и внешнего тайлинга;
  • Semantic и его производные произвели вау-эффект: stickyfunc, semantic-refactor;
  • Кажется TRAMP удобнее vim+tmux over ssh для разработки в больших долголинкующихся проектах на толстых разработческих серверах, плюс не нужно синхронизировать конфиг на несколко хостов;
  • В целом поддержка языков выглядит вкуснее аналогов vim даже в диапазоне одного проекта (cquery);
  • Интересная идея использовать dired для массового редактирования и (условно) атомарного коммита изменений метаданных ФС;
  • Интересная идея с minor-mode вроде follow-mode и disaster.

    Но на деле всё вышло не так просто. Сначала хотел настроить всё своими руками, чтобы лучше понимать происходящее под капотом. Столкнулся с недопониманием Emacs Lisp. В vim хоть и свой недоязычок, но можно быстро проверить однострочник в minibuffer с автодополнением, а затем прописать его в vimrc. Попутно почитать документацию в :help. В Emacs так не получилось, да и Lisp это не про однострочники. Вообщем - не пошло.

    Забил, поставил Spacemacs по рекоммендациям «как vim только лучше», прописал нужные layers - и вроде всё относительно сразу завелось с полпинка, но криво/непонятно/не-так-как-я-хочу и совсем неясно как научиться его кастомизировать. В Emacs Manual всё примеры основаны на key chords, а я принципиально считаю модальный режим лучше и не хочу тратить мышечную память на ещё один набор хоткеев. Возникла жуткая ломка по vim:

  • dired-mode и evil-mode пересекаются, поведение непредсказуемо как выход из vim для новичка;
  • регулярки всё равно не как в vim, например неполучилось использовать «context \zsXXX\ze context» в substitute;
  • :cd ~/some/dir, man something игнорируют параметр, заставляя меня вводить отдельно каждый уровень иерархии в Helm, когда мне проще ~/src/project набрать в стиле readline с tab и C-W;
  • FZF мне нравился больше Helm, опять же - нигде не работают привычные байндинги readline;
  • логично было бы заменить имаксом tmux и эмулятор терминала для удобной копипасты, но опять проблема с привычными хоткеями и интеграцией в evil. Ещё их 3 вида, все написаны на лиспе и есть проблема с тормознутостью и неправильной обработкой escape кодов и цветов;
  • Тут, похоже, не практикуется хорошо структурированный :help plugin-name как в vim. Авторы плагинов, видимо, предлагают мне сразу изучать их код на emacs lisp;
  • taskwarrior + vimwiki + taskwiki для меня понятнее и прощё чем монстр org-mode. У последнего нет API к списку задач, непонятно как их создавать/изменять из хуков мониторинга, например? Нормальной интеграции taskwarrior в заметки org-mode как делает taskwiki я не нашёл.

    Получилась простыня. Вопрос - как всё же правильно готовить Emacs? Как вы пересели с Vim на Evil Mode, как перестали бояться Emacs Lisp? Используете отдельный эмулятор и мультиплексор терминала или встроенные в Emacs? Или консольный Emacs внутрь tmux проинтегрировали аля kakoune?

taskwarrior + vimwiki + taskwiki для меня понятнее и прощё чем монстр org-mode. У последнего нет API к списку задач, непонятно как их создавать/изменять из хуков мониторинга, например?

Читай ман по agenda

anonymous ()

Сбегал за пивом. Можете начинать.

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

Такто Он еще и при каждой попытке нажать что-то вроде ктрлц объясняет

mos ★★☆☆☆ ()

И да, если ты не утенок, прекращай юзать эвил мод и переходи на емакс полностью.

anonymous ()

/beer mode..

emacs - крутая софтина, да.. ты таки можешь упороться, вкурить lisp и прочие ништяки, потратить месяцы/годы на настройку.. но потом, поработав с месячишко в теплоте и ламповой сухости, ты поймёшь одну простую вещь: текстового редактора в emacs таки до сих пор не завезли..

anonymous ()

В vim хоть и свой недоязычок, но можно быстро проверить однострочник в minibuffer с автодополнением, а затем прописать его в vimrc. Попутно почитать документацию в :help. В Emacs так не получилось, да и Lisp это не про однострочники

В емаксе всегда можно вычислить лисп-код через C-x C-e (в любом буфере).

yoghurt ★★★★★ ()

С emacs есть одна проблема: дефолт убог и вреден для здоровья (у меня за две недели начали болеть запястья от этих «аккордов»), а удобный кастом нужно пилить под себя годами.

Рекомендую довольствоваться youcompleteme + rtags под vim — оно и спокойней, и менее вредно для здоровья.

kawaii_neko ★★★★ ()

Не хочешь срать — не мучай жопу.

Хочешь Emacs — юзай Emacs, хочешь Emacs с evil-mode — тебе нужен Vim.

</thread>

mord0d ★★★★ ()

Подробно писать лень. В emacs есть несколько команд eval, в том числе «но можно быстро проверить однострочник» хоть в минибуфере, хоть в scratch буфере. Как работает fzf не знаю, но вместо helm можно попробовать всякие там ido, ivy и прочие. Из хуков мониторинга думаю логичнее использовать библиотеки под org-формат для подходящих тебе скриптовых языков, но можно и emacs дёргать неинтерактивно. Хелп, как правило, внутри модуля и в виде докстрингов к конкретным методам. Эмуляторов терминала больше трёх, а ещё есть свой shell (eshell).

Вообще emacs это про «разбираться, менять привычки, писать elisp, получать от этого удовольствие». А если нужен простой готовый инструмент из коробки… ну spacemacs вроде бы, но только как starter kit для вау-эффекта.

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

Получилась простыня. Вопрос - как всё же правильно готовить Emacs?

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

Как вы пересели с Vim на Evil Mode, как перестали бояться Emacs Lisp?

Если самоцель - работа _над_ редактором, надо всего-то его осилить. Я, помнится, читал какое-то онлайн-пособие 8 лет назад (попроще, чем официальный гнутый мануал), но что-то найти его не могу сейчас.

Если же цель - просто работать с текстом, [глубокое] знание емакслиспа не нужно.

Используете отдельный эмулятор и мультиплексор терминала

Да

или встроенные в Emacs?

Редко eshell, но как правило urxvt+tmux

Или консольный Emacs внутрь tmux проинтегрировали аля kakoune?

При рабтое по ssh - да (юзал трамп и sshfs раньше как опции, в итоге отошёл от этого, скорее потому что не осилил).

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

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

не наблюдал, наоборот помню как пальцы деформировались в нужную сторону и потом уже в MSVS я пытался юзать емаксьи биндинги (безуспешно)

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

Читай ман по agenda

Читал. И как мне, допустим, сделать 10 тасков «почистить диск на XXX» и переоткрывать его из хука в grafana? Предлагаешь парсить org файл и придумывать как его синхронизировать на десктоп?

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

Насчет evil не согласен. Употреблял emacs-стайл сочетания (без всяких там cua, всё по хардкору) и был вполне ими доволен. Но потом освоил систему команд вима и понял что это намного быстрее и приятнее, а evil с рядом evil-плагинов даёт наилучший вариант.

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

Есть готовые парсеры org-файлов, почему нет-то? Но можно запускать emacs неинтерактивно и говорить ему какой lisp-код выполнить. Если же тебе вот прям нужно запущенный инстанс емакса и по REST org-mode дёргать — всё в твоих руках, есть веб-сервер на elisp elnode, можешь через него реализовать API.

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

Можно просто взять IDE и не вспоминать о dotfiles.

Дольше полудня не мог их вытерпеть. Наверное только под Java оно стоит того, но я на ней много не писал.

snizovtsev ★★★★ ()

Чет я пробовал - не зашло. Пока на локалхосте - всё красиво и бохато. По ссх (а это основной кейс для меня), evil лагает, голый emacs вроде норм, но с evil артифакты и лаги. Плюс evil всё время дерётся с какими то emacs интерфейсами, такое ощущение, что он сделан так, что бы побыстрее от модальности отучить как раз.

SpaceMax тоже пробовал, во первых там всё плагиньё тухлячёк ибо баги им летят, поэтому штабильность, во вторых такая же фигня как SpaceVim - для тех, кто ещё не понял, что это педальное устройство надо точить под себя.

А так, вообще, концептуально мне emacs тоже больше нравится, но заставить себя привыкнуть не вышло.

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

И да, если ты не утенок, прекращай юзать эвил мод и переходи на емакс полностью.

Я специально привёл ссылку на аргументированное утверждение о том, почему модальный режим лучше. И несколько раз слышал про то, что Emacs становится лучше с Evil от тех, кто раньше использовал аккорды.

snizovtsev ★★★★ ()

Несколько лет назад у evil-mode была проблема с интеграцией с рядом пакетов (каких — сейчас уже не вспомню), поэтому я перешел на «чистый» emacs. Разве что левый контрол у меня на правом альте.

Если хочется псевдо-модальности, то можно попробовать god-mode — он оставляет все сочетания имакса (а значит и пакеты работать будут), но (почти) избавляет от необходимости нажимать модификаторы.

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

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

Да, это и в виме лучше всего работало. Под емакс видел даже бандл в стиле Linux From Scratch - где вместо конфигов org файлы с инструкциями по настройке. С execute буду пробовать.

Но всё же «голый» емакс не совсем голый, а с аккордами, которые я хочу отменить. Я так понимаю Emacs состоит из ядра редактора на C и айсберга на elisp над ним. И вот от документации по elisp хочется понимать - какое API у этого ядра, а что уже скриптуется над ним. Пока я видел лишь доки в стиле «как перевернуть список на elisp».

Ещё в Vim я мог контролировать кейбиндинги. Нужно выучить и запомнить базовые, далее хорошие плагины не регистрируют свои глобальные кейбиндинги при инициализации, а дают «точку входа» в виде <Plug>PluginName_FeatureX. Дальше читаешь доку по плагину и добавляешь (или нет) нужный кейбиндинг в свой vimrc. Таким образом я их запоминаю, разрешаю конфликты, понимаю что происходит при ошибочном нажатии. С Emacs так действовать не получается.

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

Я так понимаю Emacs состоит из ядра редактора на C и айсберга на elisp над ним. И вот от документации по elisp хочется понимать - какое API у этого ядра, а что уже скриптуется над ним

Боюсь, что те, кто в это погружался, заканчивали написанием собственного редактора :) Недаром у емакса столько собратьев, uemacs и тд.

ИМХО проще адаптироваться к аккордам чем глобально что-то перепиливать и тащить свои. Всё же у емакса иная парадигма в плане команд и интерактивности, нежели чем у вима.

yoghurt ★★★★★ ()

Никак. Мягкого перехода не будет. Запираешь себя внутри emacs и мануалом на столе на неделю, а потом возможно проще пойдёт.

Evgueni ★★★★★ ()

Может проще допилить vim как требуется, нежели так страдать. Ну или плюнуть, и взять VS Code / Sublime / Любой хипсторской редактор

maverik ★★ ()

Как осуществить мягкий переход с vim на emacs/evil

Может хватит скакать с одного дерьма на другое? А если опять не понравится?

Virtuos86 ★★★★★ ()

Вопрос - как всё же правильно готовить Emacs?

Очень просто. Кликаешь иконку, открываешь файл, редактируешь. Так делаю много лет. Никаких лиспов не знаю и знать не хочу.

yvv ★★☆ ()

Emacs это в первую очередь Emacs Lisp. Только поняв преимущества лиспа ты поймёшь главные преимущества emacs перед vim и другими.

ados ★★★★★ ()

Emacs as daemon

Так Neovim из коробки демона предоставляет, только еще neovim-remote нужно доставить.

В целом поддержка языков выглядит вкуснее аналогов vim даже в диапазоне одного проекта (cquery)

cquery пока одинаково неюзабелен, что в emacs, что в vim. А связка irony + rtags в emacs аналогична связке yocompleteme + rtags в vim.

Забил, поставил Spacemacs по рекоммендациям «как vim только лучше»

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

Как вы пересели с Vim на Evil Mod

Я наоборот перелез с Emacs на Neovim. Мое мнение такое, что большой разницы нет, что-то лучше сделано в emacs, что-то в vim. Жить можно и там, и там.

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

Да. Во-первых, этот текст видит примерно никто примерно никогда. Во-вторых, из этого нашего вима правда хрен выйдешь. Confession time:

Я в детстве несколько лет не мог выйти из Vim без killall из-за ненавистной мне до глубины души ошибки No write since last change (add ! to override). Писал !q, получал q: command not found, психовал, убивал, грохал swap-файл и еще немного психовал. Лет десять прошло, как я осознал свою ошибку, но мне все равно смешно.

t184256 ★★★★★ ()

Как осуществить мягкий переход

1) Заносишь правую руку над столешницей.

2) Резко опускаешь на выдохе.

3) Громко говоришь вслух «и так сойдет».

4) Сидишь на виме дальше.

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

Во-вторых, из этого нашего вима правда хрен выйдешь.

То ли дело емакс (консольный разумеется, как и вим), это же очевидно как из него выйти!

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

Да меня все устраивает, спасибо. Поживу и дальше с травмой, она смешная.

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

Так Neovim из коробки демона предоставляет, только еще neovim-remote нужно доставить.

Через remote можно только манипулировать запущенным инстансом vim, расшаривать набор открытых буферов между разными tty не выйдет.

Есть даже баунти на 110$ за эту фичу: https://www.bountysource.com/issues/9598868-multiple-linked-clients-like-fram...

cquery пока одинаково неюзабелен, что в emacs, что в vim. А связка irony + rtags в emacs аналогична связке yocompleteme + rtags в vim.

Мне со скрипом удавалось использовать cquery, пришлось немного пропатчить код. Про rtags слышал, но не пробовал завезти в vim - посмотрю. Хотя вот даже на их сайте по бейджам CI видно, что автор тестируется только под emacs.

snizovtsev ★★★★ ()

В свое время помимо глючного spacemacs ставил и https://github.com/hlissner/doom-emacs - намного быстрее и лучше конфиги. Можешь попробовать, только сейчас там вроде только develop branch надо использовать. Но я так и не смог покинуть неовим и вернулся, все равно многое корявое в емаксе (не такое как надо мне).

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

Если для semantic у них по-прежнему собственный полуготовый фронтенд C++, то вау-эффект будет недолгим.

anonymous ()

Смысл? Всё что может emacs может и vim. Если emacs что-то может значит есть плагин для него и это же значит что можно написать тоже самое для vim. Я понимаю переход на что-то потому что там всё что надо есть из коробки, а следовательно будет поддерживаться без твоего участия. Но в остальном, что-то не хватает в vim берёшь и реализуешь сам, тоже самое касается и обратной ситуации с emacs. Да есть ещё эстетический вариант, использовать что-то потому что просто нравится, но тут фломастеры и их не обсуждают. Мне вот удобен и нравится vim и если я увидел на стороне фичу я просто её реализую в vim так же как emacsеры видят что-то где-то и реализуют у себя. Ну, а если нравится, просто берёшь и переходишь, фичи же реализуешь по мере возможности, любые фичи не нужны 100% времени. Нужна только подсветка и всё, всё остальное дополнения (хотя и подсветка тоже).

anonymous ()

Может кто-нибудь объяснить, какие убеждения манят вас юзать консольные редакторы кода в 2018? Просто интересно, что в них есть такого, чего не предоставляет более дружественный редактор?

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

Первое - они не только консольные, они могут и консольном виде и графическом работать.

Второе - они расширяемы и средства расширения встроены, если нужна та или или иная фича либо она уже реализованна либо нет проблем написать её самому.

Третье - Размер исходного кода обозрим так что можно внести некой долей сложностей фундаментальные изменения для собственных нужд

Четвёртое - скорость работы.

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

Шестое - портируемость, любое устройство где существует gnu окружение уже среда разработки если это нужно.

Седьмое и всё остальное, привычка, удобство.

Большинство пишущих код имеют несколько редакторов и порой много, есть узкие IDE или сублаймы всякие по настроению удобству, но всегда есть один emacs/vim/etc который если надо заменит что угодно, тот который надёжен, тот который тебе нравится, тот в котором ты уверен. Это просто инструменты, но бывают любимые, наиболее удобные и привычные вот и всё.

anonymous ()

Итого решил пока оставаться на vim, а emacs долго и медленно крутить по настроению, пока не забью или не приведу его в нужную кондицию.

snizovtsev ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.