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

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

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

Ответы

Ответ 1

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

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

Особенности ЕЦБ и семантики в основном полезны для больших проектов (состоящих из более чем нескольких исходных файлов). Люди не склонны писать большие проекты в Emacs Lisp.

Ответ 2

ielm - это режим Emacs Lisp REPL: Интерактивный Emacs Lisp.

M-x ielm доставит вас туда.

Ответ 3

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

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

Ответ 4

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

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

Функции "apropos" являются ключевыми для поиска вещей в целом. Я использую следующие привязки для легкого доступа:

(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 связанный (но очень редко используемый).

Существуют и другие библиотеки, которые могут оказаться полезными. Я знаю, что некоторые люди клянутся ParEdit, например. По общему признанию, это немного сложно ориентировать на поиск библиотек 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)

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

Ответ 7

M-x edebug-defun 

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