2

Я нахожусь в процессе настройки слизи для Emacs. До сих пор я читал об основных функциональных возможностях для обычного lisp, такого как C-c C-q который вызывает команду slime-close-parens-at-point которая помещает правильное количество паренов, где находится ваша мышь. Другая команда, которая казалась классной, была вызвана C-c C-c и она передаст код, который вы редактируете в буфере, в REPL и "скомпилирует" его.

Почему эти команды не работают для меня?

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

До сих пор у меня не было этих команд. Вот содержимое моего файла emacs, относящегося к слизи:

;;;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 я получаю следующее сообщение в буфере inferior-lisp где я могу выполнить обычный код lisp (однако, разве это не должно быть slime-repl так как мне это нужно?):

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 с содержимым:

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. Как мне изменить мой файл emacs, чтобы дать мне функциональность этих команд? В моем файле Emacs я не загружаю необходимые файлы? Нужно ли устанавливать дополнительный пакет?

Если вам нужно больше информации, дайте мне знать! Вся помощь очень ценится!

1 ответ1

0

Во-первых: на самом деле не рекомендуется добавлять каталоги 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))

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .