LINUX.ORG.RU

Мой .emacs.d - IDE для Common Lisp (работает из коробки)

 , , , ,


2

5

Вобщем, причесал тут свои конфиги Емакса, и выложил на гитхаб.

https://github.com/Lovesan/.emacs.d

Для работы потребуется более-менее новый Emacs, такой как 29.1

Ну и SBCL (но в init.el можно раскомментить строчку и прописать свою реализацию, типа ecl). Если еще этого не сделали, также рекомендую загрузить в SBCL quicklisp чтобы библиотеки можно было вообще в пару кликов ставить.

Как только Emacs с такой конфигурацией запускается, он открывает:

  • REPL
  • scratch.lisp файл (какой это файл и где он лежит, можно поменять в init.el)
  • и открывает боковую панельку с tree-view директории scratch.lisp файла.

Дальше можно писать код, или нажать например в REPL запятую(,), и вводить команды SLIME-repl(для начала можно набрать help). inb4 побочные окошки, типа хелпа, закрываются кнопкой q на клавиатуре.

Вощем, включены SLIME, Magit(это интерфейс для гита в емаксе) и всякая мелочь для удобства. Тулбар выключен, менюха оставлена.

Для структурного редактирования кода на лиспе(включая Emacs Lisp), установлен пакет Lispy. Я раньше пользовался parinfer, но он меня окончательно достал. Lispy удобнее и к тому же легче конфигурируется.

SLIME там уже в принципе прилично настроенный, в частности даже есть немного подсветки синтаксиса для моей библиотеки bike

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

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

Итак, что я сделал, это я с помощью библиотеки rebinder.el, перенаправил префикс-сочетания C-x и C-c на C-e и C-d соответственно.

Это позволило сделать из емакса нормальный редактор кода. Да, в принципе, не хватало бы еще табов и прочих GUI-плюшек, но зато зацените, без всяких кривых CUA-mode, им наконец-то можно пользоваться.

Биндинги такие:

  • Ctrl+Q - выход из Емакса.

  • Меню/Apps (это такая кнопка рядом с правым контролом) - вызов расширенной команды по имени(типа то что в емаксе называют M-x)

Редактирование:

  • Ctrl+X - вырезать
  • Ctrl+C - копировать
  • Ctrl+V - вставка
  • Ctrl+Z - отмена
  • Ctrl+Y - вернуть
  • Ctrl+A - выделить весь текст

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

Управление буферами(такое обобщение понятия файла в емаксе):

  • Ctrl+O - открыть файл
  • Ctrl+S - сохранить буфер
  • Ctrl+W - закрыть текущий буфер
  • Alt+влево - предыдущий буфер
  • Alt+вправо - следующий буфер
  • F2 - открыть список буферов
  • Ctrl+PageDown - включает оверлей ace-window, который позволяет быстро переключаться между тайлами емакса(называемыми window). Он над каждым тайлом показывает цифру, которую надо нажать чтобы на него перейти.
  • F8 - показать/скрыть Neotree (это панелька с деревом файлов слева). Кстати в neotree теперь по Ctrl+клик мышью можно менять корень дерева файлов.

Поиск:

  • Ctrl+F - поиск вперед по тексту
  • Ctrl+Shift+F - поиск взад по тексту

Также в окошке поиска можно перемещаться стрелками, так стрелки вправо-влево управляют поиском вперед/назад по тексту, а стрелки вверх-вниз - просмотр история поиска.

Мышку кстати тоже в некоторой степени перебиндил, в частности доп. кнопки mouse-4 и mouse-5 (их обычно в современных ОС вешают на вперед/назад) управляют навигацией по буферам. В принципе, они позволяют выбирать следующий/предыдущий буфер, как Alt+влево/вправо, но с некоторыми нюансами, описанными ниже.

Кейбиндинги для Emacs Lisp и для SLIME:

  • F12 - Перейти к определению. Также, это можно сделать, клинкув на символ мышью, при этом зажимая Control(как во всех современных IDE).
  • F11 - Вернуться назад в стеке определений. Также это делается mouse-4, т.е. мышевой кнопкой «назад».
  • mouse-5 - Кнопка мыши «вперед» работает как своего рода «Redo» по отношению к предыдущей команду, т.е. она опять ныряет в стек определений, если перед этим из него был выход предыдущей командой.
  • F5 - Вычисляет выражение стоящее прямо перед курсором. Т.е. если есть форма (+ 1 2 3), курсор нужно ставить сразу после закрывающей скобки.
  • Alt-вверх - интеллектуальный переход наверх по S-выражению, с использованием Lispy.
  • Alt-вниз - интеллектуальный переход к следующему S-выражению, с использованием Lispy.

Кейбиндинги специально для SLIME:

  • F1 - информация о символе. Если вызывать на пустом месте, в командной строке нужно будет ввести имя символа. Если нажать над символом, то опишут его.
  • F3 - поиск по символам. Выведет список символов и краткое описание. Ищет только по тем символам, которые связаны с функциями, переменными, классами, итд.
  • F4 - Скрыть/показать REPL в текущем тайловом окне.
  • F6 - Скомпилировать и загрузить текущий файл

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

Ксатит вот где можно еще почитать по SLIME, Lispy и Magit:

★★

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

Кроме кривого убогого CUA mode, щас в емаксе по сути распространены только вим-кейбиндинги и дефолт, и вот эти оба это натурально звиздец, одно хуже другого. Одно родом из 70х, и вообще трешак для терминала, а второе это для клавиатур старых-лисп машин, которые используют только позеры. И вот это - реально звиздец.

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

Ну ты хотя бы сделай чтобы такие биндинги ставились отдельной функцией и только тем, кому это надо..

А то выглядит так что ты пришёл в мечеть размахивая радужным флагом... Это плохо для популярности.

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

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

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

Году в 3024, MS в блокнот и подсветку синтаксиса введет, наверное, да. А так, пока что единственно чем он выигрывает это табы есть. Табы было бы неплохо добавить, вот в емакс, это да.

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

Потому что зачем? Я посмотрел вон эти стикеры, оно того не стоит, по-моему. Говорят, к тому же еще и нестабильный. И инспектора объектов такого навороченного нет, как и других контрибов к SLIME.

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

Буферы в текущем окне

Так можно сайдбар с буферами открыть и переключать. Или даже тупо окно, ibuffer или как его там. Я уж не говорю про helm и подобное.

Или надо чтобы оно всегда было именно как табы оформлено? Я хз как 500 табов будут отображаться.

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

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

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

В Visual Studio же как-то отображаются.

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

Но нет, не хочу нормальный лэйаут, хочу говно из терминала из 70х.

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

Модно-молодёжно.

Вот это самая тупая причина по которой можно это сделать. Это к жопоскриптерам, а не к лисперам, за таким. Ладно бы еще если SLIME был бы заброшен, но так нет, там активности даже больше, в разработке.

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

Проблема еще в отсутствии консистентности примерно со всеми остальными редакторами и программами

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

Кроме того в emacs 100500 способов что-то вырезать, странно переназначать только один.

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

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

И что, и в офисных пакетах, и так далее? Это мягко говоря, странно.

Да и в целом, проблема есть конечно, но по-моему она очень узко-специальная и незначительная.

Естественно, значительная, и это то что многих людей от емакса отталкивает.

Кроме того в emacs 100500 способов что-то вырезать, странно переназначать только один.

Какие-то другие вещи, кроме текста, как раз не особо и значительные, но если это важно, то если постараться, и к ним можно подрубиться через Ctrl-X, и унифицировать, делай пуллреквест.

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

RSI

это был эпичный развод австралийских медстраховщиков и работо-«дателей» на большие деньги жёлтыми профсоюзами. К медицине и вообще к реальной жизни отношения не имеет.

Закопайте уже во Христе этот буллшит тридцатилетней давности.

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

В Visual Studio же как-то отображаются.

Мне так кажется что VS не принято держать постоянно запущенной и открывать там по 500 файлов одновременно. Но мой главный вопрос, зачем их отображать? Вот именно постоянно как табы. Список открытых буферов который показывается когда надо эффективно тоже самое что и табы. По-моему как раз именно табы это анахронизим и ограничение платформы, где на каждый файл обязательно должно быть окно. В win31 окна-документы просто сворачивали в MDI, а потом придумали табы. Чуть по-лучше визуально, но всё равно те же яйца, вид сбоку.

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

Мне так кажется что VS не принято держать постоянно запущенной и открывать там по 500 файлов одновременно.

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

Но мой главный вопрос, зачем их отображать? Вот именно постоянно как табы.

Потому что это удобно! Все видно сразу, где у тебя что. Без лишних телодвижений. Я вон ibuffer на F2 повесил, и то не так удобно, как табы.

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

что, и в офисных пакетах

Зачем мне работать в офисных пакетах на таком уровне, чтобы нужно было применять хоткеи? Я ж не бухгалтер. Да и вообще не часто приходится. Доки я пишу в org-mode.

Естественно, значительная, и это то что многих людей от емакса отталкивает.

Значит он им просто не нужен. Оставь их в покое.

Какие-то другие вещи, кроме текста

Я имел в виду именно текст. Вырезать можно слово, выражение, предложение, строку и т.д. Всё это разные хоткеи. Кроме того как быть с добавлением вырезаемого? Такое поведение в других «офисных пакетах» не характерно. А как быть с модификаторами? Экспириенс из emacs всё равно не перенести в другие пакеты. Я сколько не пытался пользоваться, например другими IDE, не получается, какие-то они дубовые. И дело в том что нет фич emacsа, а не в хоткеях.

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

Все видно сразу, где у тебя что. Без лишних телодвижений. Я вон ibuffer на F2 повесил, и то не так удобно, как табы.

Ну хз, я использую helm для переключения и мне так удобнее: видеть список только когда я хочу переключиться. Там и разбивка по проектам и fuzzy поиск. А табы нужно глазами искать и мышкой тыкать. Ниочём. Как и дерево файлов в сайдбаре, кстати. Тоже изобретение для «визуальной среды». Я его даже прикрутил, но так и не пользуюсь.

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

Зачем мне работать в офисных пакетах на таком уровне, чтобы нужно было применять хоткеи? Я ж не бухгалтер. Да и вообще не часто приходится. Доки я пишу в org-mode.

Что зачем? Ништяк жить в башне из слоновой кости.

Значит он им просто не нужен. Оставь их в покое.

Вот это называется позерство.

Люди приходят скажем на /r/Lisp, там говорят - а в чем писать? Люди открывают Emacs, видят какое это неудобное дерьмо с доисторическим интерфейсом, у них энтузиазма сильно так поуменьшается. Щас хорошо хоть Lem придумали, но вообще, Emacs надо полностью переписать к херам. На CL. И сделать UX нормальный.

Я имел в виду именно текст. Вырезать можно слово, выражение, предложение, строку и т.д.

Не надо. Надо вырезать выделенный текст. Мне ни разу не приходилось примерно вообще никогда специально вырезать какие-то отдельные слова так, чтобы на это потребовались хоткеи. И это неинтуитивно, если ты этого не видишь, что ты делаешь с текстом. (хотя наврал, помню как знатно обсирался в виме несколько раз, когда случайно удалял строку а потом не понимал куда она делась)

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

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

пока что пожелаем профессионального роста и успехов в полноценном освоении полноценного Языка Программиропвания - До-Ди(м)ез. Или хотя бы паскальной живописи, для начала. Если, конечно, мозг окончательно не распрямился от осьминожного емакса и математикского лишпа, в чем сильно сомневаюсь.

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

Люди открывают Emacs, видят какое это неудобное дерьмо с доисторическим интерфейсом, у них энтузиазма сильно так поуменьшается

Это они ещё ЛИСП не видели. С таким настроем пусть они лучше сразу уходят и не тратят время. Ну или возьмут блокнот vscode, там уже все «как надо». Кстати, к тебе вопрос, может стоит таки модуль для vscode запилить, вместо того чтобы ломать emacs?

Не надо. Надо вырезать выделенный текст

Ты просто не постиг дзен.

это неинтуитивно, если ты этого не видишь, что ты делаешь с текстом

Как это не видишь? Текст же удаляется. Я вообще не помню когда я последний раз вырезал текст выделением. В основном это как раз M-d, C-k, C-S-<backspace> и т.п.

PS: а не, вспомнил, но это вертикальное выделение и там другое вырезание.

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

Мешать лисп и хаскель в одну кучу - вот это отлично показывает уровень понимания тобой окружающей реальности. У тараканов примерно такой же.

Приходи тогда, когда лисп не на картинках увидишь.

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

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

пытаются доказать что дефолт емакса удобный

Он возможно не самый удобный, но ты делаешь только хуже.

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

Что, хуже? Это называется эргономика работы с текстом, алло. Которой в емаксе обычно вообще нет, даже для базовых и простых операций работы с текстом вообще.

А то что, все сидят типа, в студиях, в идеях, в мс офисах, и такие дубовые что не понимают сути, страдают, и в одном емаксе кейбиндинги нормальные?

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

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

Что, хуже?

Хуже то, что это не стыкуется с остальным emacs чуть более чем никак. Вот смотри. Вставка у тебя C-v, вместо C-y. А что вместо M-y? Нишиша. Мне теперь пальцы ломать что ли? Если сделать M-v то пропадает скролл окна. Другой пример C-w копирует выделенный текст, а С-M-w модифицирует следующую команду на добавление. Т.о. есть удобная комбинация C-M-w+C-w которая копирует с добавленим. У тебя теперь это не удобно. Нужно жать C-M-w+C-c. Отдельный косяк, что C-w закрывает буфер и можно случайно нажать C-w вместо C-M-w. И так далее. Если тянуть за эту ниточку, то все хоткеи придётся перелопатить. Чтобы что? Чтобы тупорылые макаки, которые не могут запомнить несколько новых кнопок пытались в ЛИСП? Может не надо?

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

Для тебя емакс это способ выебнуться

Я в emacs работаю, уже 20 лет и мне за это платят.

программируемый и расширяемый редактор, и в этом его фишка, а не в залупных кейбиндингах

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

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

Все остальные команды тоже надо перелопатить. Да. Именно так. Потому что дефолтные это сранье. И многие дефолтные сценарии можно вообще вырезать к херам, потому что я лично, как я уже сказал, использую Emacs для редактирования кода на CL, и для всякого хитрого структурного редактирования там есть Lispy, а вот это вот говно которое ты описал - оно не нужно вообще от слова совсем. А для остального его использовать и не надо вообще. Потому что для какого-нибудь C# или C++ есть Visual Studio, для Java есть IDEA, итд. А не для программирования так он вообще к херам и не сдался.

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

Биндинги можно выучить, если есть необходимость, или интерес.

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

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

Сам же тут распинаешься, что «модно-молодёжно» это не аргумент, но при этом ты хочешь завлечь неофитов модными биндингами.

Те которые я сделал они не «модные», они стандартные для современных клавиатур, для работы с текстом. В этом нет никакой моды, это стандарт для современных клавиатур. Сколько еще раз повторить?

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

Если кто-то заплатит, почему нет.

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

lovesan ★★
() автор топика