Schleim in Emacs konfigurieren

1278
CodeKingPlusPlus

Ich bin dabei, Schleim für Emacs zu konfigurieren. Bis jetzt habe ich über grundlegende Funktionen für allgemeine LISP gelesen, wie beispielsweise, C-c C-qder den Befehl aufruft, der slime-close-parens-at-pointdie richtige Anzahl von Parens an der Stelle der Maus platziert. Ein anderer Befehl, der cool schien, wurde von aufgerufen C-c C-cund würde den Code, den Sie bearbeiten, in einem Puffer an die REPL übergeben und "kompilieren".

Warum funktionieren diese Befehle nicht für mich?

Wie auch immer, ich habe slimeüber heruntergeladen M-x list-packagesund scheint diese Funktionalität nicht zu haben ( C-h wund dann sagt mir jeder dieser Befehle, dass diese Befehle vorhanden sind). Also sah ich eine Reihe anderer Schleimerweiterungen wie slime-repl', 'slime-fuzzy' and 'hippie-expand-slime'. So I again usedMx-Listenpakete und lud sie herunter.

Noch hatte ich diese Befehle nicht. Hier ist der Inhalt meiner Emacs-Datei, die für Schleim relevant ist:

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

Beim Ausführen M-x slimeerhalte ich die folgende Meldung im inferior-lispPuffer, in der ich allgemeinen Lisp-Code ausführen kann (sollte dies jedoch nicht der Fall sein, slime-replda ich ihn benötigt habe?):

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. 

Dann wird ein slime-errorPuffer mit dem Inhalt erstellt:

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. Wie kann ich meine emacs-Datei ändern, um mir die Funktionalität dieser Befehle zu ermöglichen? Lade ich in meiner emacs-datei nicht die notwendigen dateien? Muss ich ein zusätzliches Paket installieren?

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen! Alle Hilfe wird sehr geschätzt!

2

1 Antwort auf die Frage

0
Aaron Miller

Erstens: Es ist nicht wirklich empfehlenswert, ELPA-Verzeichnisse wie von Ihnen beschrieben manuell zu Ihrem Ladepfad hinzuzufügen. Wenn Sie diese Pakete jemals über ELPA aktualisieren, befinden sich die neuen Versionen in verschiedenen Verzeichnissen und Sie müssen diesen Teil Ihres Init-Codes erneut aufrufen, um diese Versionen stattdessen zu laden. Nach dem Prinzip, dass es am besten ist, so viel wie möglich zu automatisieren, sollten Sie den Paket-Manager explizit initialisieren, der automatisch alle installierten Pakete zum Ladepfad hinzufügt, anstatt darauf zu warten, dass er nach der Initialisierung nach der Initialisierung initialisiert wird ; Sehen Sie diese Antwort, wie das geht.

Nun, dann: Ich bin mir nicht sicher, wo ich diese Initialisierungscode-Strophe für Slime bekommen habe, aber ich bin noch nie ausgefallen:

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

Das heißt, ich verwende nur SBCL und sehe, dass Sie mehrere Implementierungen verwenden. Der beste Weg, diesen Init-Code für Ihren Fall zu ändern, wäre etwa so:

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

Da Sie den Paketmanager bereits mit meinen vorherigen Kommentaren initialisiert haben, müssen Sie dem Ladepfad nicht explizit etwas hinzufügen. da Sie mehrere Lisps verwenden, ersetzen wir sie (setq inferior-lisp-program "...")auch.

In diesem M-x slimeFall werden Sie SBCL aufrufen und Sie erhalten eine REPL usw., während Sie gefragt werden, M-- M-x slimewelche Lisp-Implementierung aufgerufen werden soll.