настройка слизи в emacs

1164
CodeKingPlusPlus

Я нахожусь в процессе настройки слизи для 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 usedMx 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 >  (:emacs-rex (swank:create-repl nil) "COMMON-LISP-USER" t 5) 
  1. Как мне изменить мой файл emacs, чтобы дать мне функциональность этих команд? В моем файле Emacs я не загружаю необходимые файлы? Нужно ли устанавливать дополнительный пакет?

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

2

1 ответ на вопрос

0
Aaron Miller

First: It's not really recommended to add ELPA directories to your load path by hand, in the fashion you've done; if you ever update those packages through ELPA, the new versions will be in different directories, and you'll have to revisit this part of your init code to load those versions instead. On the principle that it's best to automate as much as possible, you're better off explicitly initializing the package manager, which will automatically add all your installed packages to the load path, rather than waiting for it to initialize after init as is the default; see this answer for how that's done.

Now, then: I'm not sure where I got this stanza of initialization code for Slime, but it has never failed me yet:

(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)) 

That said, I only use SBCL, and I see you use multiple implementations. Probably the best way to modify this init code for your case would be something like this:

(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)) 

Since you've already initialized the package manager per my previous comments, there's no need to explicitly add anything to the load path; since you use several Lisps, we replace the (setq inferior-lisp-program "...") as well.

With this in place, M-x slime will invoke SBCL and give you a REPL, &c., while M-- M-x slime will prompt for which Lisp implementation to invoke.

Похожие вопросы