Программирование на Elisp — какая лучшая настройка?

#emacs #development-environment #elisp

#emacs #среда разработки #elisp

Вопрос:

В Emacs есть всевозможные классные режимы языка программирования, написанные на elisp, но, по-видимому, нет специальной поддержки самого elisp.

Поскольку slime не работает для elisp, я спрашиваю себя, не был ли весь этот код elisp просто взломан в буфере scratch? Нет ли необходимости в чем-то вроде slime при написании elisp, или его просто нет? Кто-нибудь использует ECB и semantic для более крупных проектов elisp?

Комментарии:

1. Какие функции вы ищете? По общему признанию, я не использую другие lisps, поэтому я незнаком с подобными slime, но я никогда не замечал, чтобы Emacs испытывал недостаток в поддержке разработки на elisp. Могут существовать способы сделать то, что вы хотите.

2. Поскольку я начинаю с elisp, это скорее общий вопрос. Я хотел бы знать, как другие подходят к программированию на elisp, просто чтобы убедиться, что я не упускаю что-то важное. В Google-space почти пусто для «настройки elisp». Если это просто открытие файла .el с использованием загруженного emacs-lisp-mode и встроенного отладчика (или edebug), я уверен.

Ответ №1:

ielm является ли Emacs Lisp REPL: интерактивным режимом Emacs Lisp.

M-x ielm поможет вам в этом.

Комментарии:

1. но, похоже, нет хорошего способа отправить части буфера процессу. Я хотел бы сделать то, что позволяют мне elpy или ess, то есть отправить область, буфер или файл в интерактивный процесс, чтобы я мог поиграть с этим там

2. @Dodgie: чтобы «отправить регион», выполните M-x eval-region RET . Обычно вы используете либо C-M-x , либо C-x C-e , хотя.

Ответ №2:

Сам Emacs поставляется с поддержкой Emacs Lisp. Такие базовые и промежуточные функции, как завершение ( M-TAB ), поиск в библиотеке ( M-x apropos ), документация ( C-h f , C-h v , C-h S ), запуск кода «на лету» ( C-M-x , M-: ), выполняются непосредственно в запущенном Emacs.

Основная цель Slime — взаимодействие с внешним процессом. Для Emacs Lisp это не нужно (если только вы не разрабатываете для другой версии Emacs, но это редко вызывает беспокойство).

Функции ECB и semantic в основном полезны для больших проектов (состоящих из более чем нескольких исходных файлов). Люди не склонны писать большие проекты на Emacs Lisp.

Комментарии:

1. Можно даже сказать, что смысл Slime в том, чтобы сделать разработку на CL почти такой же удобной, как Elisp из коробки.

Ответ №3:

Всегда есть emacs-lisp-mode, который (по крайней мере, в Emacs 23) автоматически загружается всякий раз, когда вы редактируете файл .el. Похоже, именно это используют многие хакеры emacs lisp для написания своих программ. В нем есть несколько приятных функций (например, компиляция или оценка буфера, некоторые инструменты отладки, профилирование). Буфер *scratch * по умолчанию редактируется из lisp-interaction-mode, который немного отличается.

Он не такой полнофункциональный, как, скажем, slime (сообщество elisp гораздо меньше, чем common lisp), но он определенно работает. Вам придется покопаться в документации и поэкспериментировать с режимом, чтобы увидеть, какие функции вы можете использовать.

Комментарии:

1. Итак, есть 3 варианта: scratch-buffer и ielm для интерактивного использования и emacs-lisp-mode для более «серьезного» программирования на elisp. Буквально минуту назад я нашел огромную коллекцию Yasnippets для elisp, даже для заголовка файла, что может еще больше ускорить процесс: emacswiki.org/emacs-en/AndyStewart_YasnippetTemplate#toc2

2. SLIME был написан потому, что хакеру elisp хотелось чего-то такого же хорошего, как edebug, ielm и связанные с ними инструменты для Common Lisp. Это было бы трудно проверить, но я бы предположил, что количество программистов на elisp намного больше, чем количество программистов на Common Lisp.

Ответ №4:

Как указано, Emacs уже является окончательной средой разработки elisp и внутренне предоставляет вам большую часть функциональности, которая вам, вероятно, понадобится.

Потенциально вы могли бы также использовать ctags / etags для генерации внешнего индекса для вашей базы кода elisp, если вы хотели перейти к определениям функций, которые еще не были загружены (и в которых отсутствовали объявления автоматической загрузки). M-x find-function RET обрабатывает это иначе. (Я привязываю это к C-hC-f)

Функции «по назначению» являются ключом к поиску вещей в целом. Для удобства доступа я использую следующие привязки:

 (define-prefix-command 'Apropos-Prefix nil "Apropos (a,c,d,i,l,v,C-v)")
(global-set-key (kbd "C-h C-a") 'Apropos-Prefix)
(define-key Apropos-Prefix (kbd "a")   'apropos)
(define-key Apropos-Prefix (kbd "C-a") 'apropos)
(define-key Apropos-Prefix (kbd "c")   'apropos-command)
(define-key Apropos-Prefix (kbd "d")   'apropos-documentation)
(define-key Apropos-Prefix (kbd "i")   'info-apropos)
(define-key Apropos-Prefix (kbd "l")   'apropos-library)
(define-key Apropos-Prefix (kbd "v")   'apropos-variable)
(define-key Apropos-Prefix (kbd "C-v") 'apropos-value)

;; Use prefix arg (C-u) to see more results for a call,
;; or uncomment the next line to do this by default:
;; (setq apropos-do-all t)
;; See C-h v apropos-do-all RET for details.
  

Я также включаю eldoc-mode и у меня есть imenu-ido-goto-symbol привязка (но очень редко используется).

Существуют другие библиотеки, которые могут оказаться полезными. Я знаю, что некоторые люди ругаются, например, Parredit. По общему признанию, немного сложно настроить поиск библиотек elisp, которые полезны для написания elisp. Я не уверен, есть ли в Emacs Wiki категория для этого?

Ответ №5:

  • Обычно я использую emacs-lisp-mode вместо режима по умолчанию для *scratch* . В 99% случаев я хочу сэкономить даже одноразовые интерактивные тесты (по крайней мере временно), поэтому я чаще использую *.el файл, чем *scratch* .

  • Icicles могут очень помочь при взаимодействии с Emacs Lisp. Способов слишком много, чтобы перечислять их здесь. Вот два обзора, которые могут дать представление:

http://www.emacswiki.org/emacs/EmacsNewbieWithIcicles

http://www.emacswiki.org/emacs/Icicles_-_Nutshell_View

Ответ №6:

Я думаю, добавить это к вам .emacs

 (define-key emacs-lisp-mode-map (kbd "M-.") 'find-function-at-point)
  

будет очень полезно.

Комментарии:

1. M-. уже делает это по умолчанию (через xref библиотеку) в достаточно последних версиях Emacs.

Ответ №7:

 M-x edebug-defun 
  

для отладки функции
Я думаю, что это лучшие инструменты отладки для elisp.