Вобщем, причесал тут свои конфиги Емакса, и выложил на гитхаб.
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: