LINUX.ORG.RU

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

 , , , ,


3

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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RSI

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

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

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

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

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

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

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

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

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

no-such-file ★★★★★
()
Ответ на: комментарий от 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 ★★★
() автор топика
Ответ на: комментарий от lovesan

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

В теории да, а на практике получается как у тебя, приколхоженое сбоку нечто. Потому что перелопатить все у всех кишка тонка. Проще уж действительно всё выкинуть и написать с нуля на CL.

они стандартные для современных клавиатур, для работы с текстом

Ты удивишься, но на современных клавиатурах есть специальные кнопки для этого: delete, insert. И они даже работают. Везде. И даже в emacs, внезапно.

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

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

На практике, у меня вменяемая конфигурация, с которой можно хоть как-то жить. А не наркомания, которая всех нормальных людей отталкивает.

То что я не дописал, я просто вызываю как команду.

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

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

Эт да. Я в свое время, познакомившись с линупсом после «хрюши», хотел пользоваться переключалкой раскладки на Ctrl+Shift. Казалось, это более разумно – клавиши рядом располагаются, и контрол в углу клавиатуры находится => на ощупь легче ориентироваться. Но потом сказалось чередование работы/эникейства то на венде, то на линупсе на разных компах, и вернулся к Alt+Shift, на чем благополучно и остановился. Может, и безобразно, зато единообразно и без досадных ступоров.

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

Чтобы что? Чтобы тупорылые макаки, которые не могут запомнить несколько новых кнопок пытались в ЛИСП? Может не надо?

Как чистокровно по-арийски замечено :D.

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

Ты удивишься, но на современных клавиатурах есть специальные кнопки для этого: delete, insert. И они даже работают. Везде. И даже в emacs, внезапно.

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

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

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

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

Следовательно, вимакс - для бухгальтерш с двухпальцевым набором, бгг.

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

C-Spc и выделяешь.

Так это в emacs, а речь про «как принято везде». С-Spc щас везде вроде бы раскладку переключает.

PS: чёт последнее время какое-то весеннее обострение и кучи ответов вообще не в тему. Нахрен вскукарекивать, если ты тему не прочитал и не понимаешь на что отвечаешь?

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

последнее время какое-то весеннее обострение

Нахрен вскукарекивать, если ты тему не прочитал

И не говори. Куча каких-то агрессивных повылазила, не знакомых с традициями.

Nervous ★★★★★
()