configuring slime in emacs

I am in the process of configuring slime for emacs. So far I have read about basic functionality for common lisp such as C-c C-q which invokes the command slime-close-parens-at-point which places the proper number of parens where your mouse is. Another command that seemed cool was invoked by C-c C-c and it would pass the code you are editing in a buffer to the REPL, and "compile" it.

Why won't these commands work for me?

Во всяком случае, я скачал slime с помощью M-x list-packages и, кажется, не имеют этой функциональности (C-h w и затем любая из этих команд говорит мне, что эти команды действительно существуют). Итак, я видел кучу других расширений слизи, таких как slime-repl', 'slime-fuzzy' and 'hippie-expand-slime'. So I again usedMx list-packages` и скачал их.

До сих пор у меня не было этих команд. Here is the content of my emacs file relevant to slime:

;;;Common Lisp and Slime                                                                                                                                
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-20130626.1151")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-repl-201000404")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/hippie-expand-slime-20130226.1656")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-fuzzy-20100404")

(require 'slime)
(setq slime-lisp-implementations
     `((sbcl ("/usr/bin/sbcl"))
       (ecl ("/usr/bin/ecl"))
       (clisp ("/usr/bin/clisp" "-q -I"))))

(require 'slime-repl)
(require 'slime-fuzzy)
(require 'hippie-expand-slime)

Когда я выполню M-x slime I get the following message in the inferior-lisp buffer where I can execute common lisp code (however, shouldn't this be the slime-repl since I required it?):

STYLE-WARNING: redefining EMACS-INSPECT (#<BUILT-IN-CLASS T>) in DEFMETHOD
STYLE-WARNING:
   Implicitly creating new generic function STREAM-READ-CHAR-WILL-HANG-P.
WARNING: These Swank interfaces are unimplemented:
 (DISASSEMBLE-FRAME SLDB-BREAK-AT-START SLDB-BREAK-ON-RETURN)
;; Swank started at port: 46533.

Затем slime-error buffer is created with the contents:

Invalid protocol message:
Symbol "CREATE-REPL" not found in the SWANK package.

  Line: 1, Column: 28, File-Position: 28

  Stream: #<SB-IMPL::STRING-INPUT-STREAM {10056B9C33}>

(:emacs-rex (swank:create-repl nil) "COMMON-LISP-USER" t 5)
  1. How should I modify my emacs file to give me the functionality of those commands? In my emacs file am I not loading the necessary files? Do I need to install an additional package?

If you need more information let me know! Вся помощь очень ценится!

1 ответ

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

Теперь, потом: я не уверен, где я получил этот раздел кода инициализации для Slime, но он никогда меня не подводил:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/slime"))
(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(setq inferior-lisp-program "sbcl")
(slime-setup '(slime-fancy slime-asdf))

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

(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(setq slime-lisp-implementations
  `((sbcl ("/usr/bin/sbcl"))
   (ecl ("/usr/bin/ecl"))
   (clisp ("/usr/bin/clisp" "-q -I"))))
(slime-setup '(slime-fancy slime-asdf hippie-expand-slime))

Поскольку вы уже инициализировали менеджер пакетов согласно моим предыдущим комментариям, нет необходимости явно добавлять что-либо в путь загрузки; так как вы используете несколько Лиспов, мы заменяем (setq inferior-lisp-program "...") также.

С этим на месте, M-x slime вызовет SBCL и даст вам REPL, и т. д., в то время как M-- M-x slime подскажет, какую реализацию Lisp вызывать.

Другие вопросы по тегам