Recherche…


Installation

Il est préférable d'utiliser la dernière version de SLIME depuis le dépôt MELPA d'Emacs: les paquets peuvent être un peu instables, mais vous obtenez les dernières fonctionnalités.

Portail et multiplateforme Emacs, Slime, Quicklisp, SBCL et Git

Vous pouvez télécharger une version portable et multiplateforme d'Emacs25 déjà configurée avec Slime, SBCL, Quicklisp et Git: Portacle . C'est un moyen rapide et facile de démarrer. Si vous voulez apprendre à installer tout vous-même, lisez la suite.

Installation manuelle

Dans le fichier d'initialisation GNU Emacs (> = 24.5) ( ~/.emacs ou ~/.emacs.d/init.el ), ajoutez ce qui suit:

;; Use Emacs package system
(require 'package)
;; Add MELPA repository
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)
;; Reload package list
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))
;; List of packages to install:
(setq package-list
      '(magit                    ; git interface (OPTIONAL)
        auto-complete            ; auto complete (RECOMMENDED)
        auto-complete-pcmp       ; programmable completion
        idle-highlight-mode      ; highlight words in programming buffer (OPTIONAL)
        rainbow-delimiters       ; highlight parenthesis (OPTIONAL)
        ac-slime                 ; auto-complete for SLIME
        slime                    ; SLIME itself
        eval-sexp-fu             ; Highlight evaluated form (OPTIONAL)
        smartparens              ; Help with many parentheses (OPTIONAL)
        ))

;; Install if are not installed
(dolist (package package-list)
  (unless (package-installed-p package)
    (package-install package)))

;; Parenthesis - OPTIONAL but recommended
(show-paren-mode t)
(require 'smartparens-config)
(sp-use-paredit-bindings)
(sp-pair "(" ")" :wrap "M-(")
(define-key smartparens-mode-map (kbd "C-<right>") 'sp-forward-slurp-sexp)
(define-key smartparens-mode-map (kbd "C-<left>") 'sp-backward-slurp-sexp)
(define-key smartparens-mode-map (kbd "C-S-<right>") 'sp-forward-barf-sexp)
(define-key smartparens-mode-map (kbd "C-S-<left>") 'sp-backward-barf-sexp)

(define-key smartparens-mode-map (kbd "C-)") 'sp-forward-slurp-sexp)
(define-key smartparens-mode-map (kbd "C-(") 'sp-backward-slurp-sexp)
(define-key smartparens-mode-map (kbd "C-}") 'sp-forward-barf-sexp)
(define-key smartparens-mode-map (kbd "C-{") 'sp-backward-barf-sexp)

(sp-pair "(" ")" :wrap "M-(")
(sp-pair "[" "]" :wrap "M-[")
(sp-pair "{" "}" :wrap "M-{")

;; MAIN Slime setup
;; Choose lisp implementation:
;; The first option uses roswell with default sbcl
;; the second option - uses ccl directly
(setq slime-lisp-implementations
      '((roswell ("ros" "-L" "sbcl-bin" "run"))
        (ccl ("ccl64"
              "-K" "utf-8"))))
;; Other settings...

SLIME seul est correct, mais il fonctionne mieux avec le gestionnaire de paquets Quicklisp . Pour installer Quicklisp, suivez les instructions sur le site Web (si vous utilisez Roswell , suivez les instructions de Roswell). Une fois installé, dans votre lisp invoquer:

(ql:quickload :quicklisp-slime-helper)

et ajoutez les lignes suivantes au fichier init d'Emacs:

;; Find where quicklisp is installed to
;; Add your own location if quicklisp is installed somewhere else
(defvar quicklisp-directories
  '("~/.roswell/lisp/quicklisp/"           ;; default roswell location for quicklisp
    "~/quicklisp/")                        ;; default quicklisp location
  "Possible locations of QUICKLISP")

;; Load slime-helper
(let ((continue-p t)
      (dirs quicklisp-directories))
  (while continue-p
    (cond ((null dirs) (message "Cannot find slime-helper.el"))
          ((file-directory-p (expand-file-name (car dirs)))
           (message "Loading slime-helper.el from %s" (car dirs))
           (load (expand-file-name "slime-helper.el" (car dirs)))
           (setq continue-p nil))
          (t (setq dirs (cdr dirs))))))

;; Autocomplete in SLIME
(require 'slime-autoloads)
(slime-setup '(slime-fancy))

;; (require 'ac-slime)
 (add-hook 'slime-mode-hook 'set-up-slime-ac)
 (add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
 (eval-after-load "auto-complete"
   '(add-to-list 'ac-modes 'slime-repl-mode))

(eval-after-load "auto-complete"
  '(add-to-list 'ac-modes 'slime-repl-mode))

;; Hooks
(add-hook 'lisp-mode-hook (lambda ()
                            (rainbow-delimiters-mode t)
                            (smartparens-strict-mode t)
                            (idle-highlight-mode t)
                            (auto-complete-mode)))

(add-hook 'slime-mode-hook (lambda ()
                             (set-up-slime-ac)
                             (auto-complete-mode)))

(add-hook 'slime-repl-mode-hook (lambda ()
                                  (rainbow-delimiters-mode t)
                                  (smartparens-strict-mode t)
                                  (set-up-slime-ac)
                                  (auto-complete-mode)))

Après le redémarrage, GNU Emacs installera et configurera tous les paquets nécessaires.

Démarrer et terminer SLIME, commandes spéciales (virgule) REPL

Dans Emacs, Mx slime démarrera slime avec la première implémentation Common Lisp par défaut. Si plusieurs implémentations sont fournies (via des implémentations variables slime-lisp-implementations ), d'autres implémentations sont accessibles via M-- Mx slime , qui offrira le choix des implémentations disponibles dans le mini-tampon.

Mx slime ouvrira le tampon REPL qui ressemblera à ceci:

; SLIME 2016-04-19
CL-USER> 

Le tampon SLIME REPL accepte quelques commandes spéciales. Elles commencent toutes avec , . Une fois , est tapé, la liste des options sera affiché dans le mini-tampon. Ils comprennent:

  • ,quit
  • ,restart-inferior-lisp
  • ,pwd - imprime le répertoire courant à partir duquel Lisp est exécuté
  • ,cd - va changer le répertoire courant

Utiliser REPL

CL-USER> (+ 2 3)
5
CL-USER> (sin 1.5)
0.997495
CL-USER> (mapcar (lambda (x) (+ x 2)) '(1 2 3))
(3 4 5)

Le résultat imprimé après l'évaluation n'est pas seulement une chaîne: il y a un objet Lisp complet qui peut être inspecté en cliquant dessus avec le bouton droit de la souris et en choisissant Inspecter.

L'entrée multi-lignes est également possible: utilisez Cj pour mettre une nouvelle ligne. Enter -key provoquera l'évaluation du formulaire entré et si le formulaire n'est pas terminé, entraînera probablement une erreur:

CL-USER> (mapcar (lambda (x y)
                   (declare (ignore y))
                   (* x 2))
                 '(1 2 3)
                 '(:a :b :c))
(2 4 6)

La gestion des erreurs

Si l'évaluation provoque une erreur:

CL-USER> (/ 3 0)

Cela affichera un tampon de débogueur avec le contenu suivant (dans lisp SBCL):

arithmetic error DIVISION-BY-ZERO signalled
Operation was /, operands (3 0).
   [Condition of type DIVISION-BY-ZERO]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1004FA8033}>)

Backtrace:
  0: (SB-KERNEL::INTEGER-/-INTEGER 3 0)
  1: (/ 3 0)
  2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (/ 3 0) #<NULL-LEXENV>)
  3: (EVAL (/ 3 0))
  4: (SWANK::EVAL-REGION "(/ 3 0) ..)
  5: ((LAMBDA NIL :IN SWANK-REPL::REPL-EVAL))
--- more ---

En déplaçant le curseur vers le bas --- more --- passerez --- more --- provoquera l'extension de la trace arrière.

À chaque ligne du backtrace, appuyez sur Enter pour afficher plus d'informations sur un appel particulier (si disponible).

Appuyez sur Enter sur la ligne de redémarrage pour provoquer un redémarrage particulier. Alternativement, le redémarrage peut être choisi par le nombre 0 , 1 ou 2 (appuyez sur la touche correspondante n'importe où dans le tampon). Le redémarrage par défaut est marqué par une étoile et peut être appelé en appuyant sur la touche q (pour "quitter"). Appuyez sur q pour fermer le débogueur et afficher les informations suivantes dans REPL

; Evaluation aborted on #<DIVISION-BY-ZERO {10064CCE43}>.
CL-USER> 

Enfin, très rarement, mais Lisp peut rencontrer une erreur qui ne peut pas être traitée par le débogueur Lisp, auquel cas il tombera dans un débogueur de bas niveau ou finira anormalement. Pour voir la cause de ce type d'erreur, passez au tampon *inferior-lisp* .

Configuration d'un serveur SWANK sur un tunnel SSH.

  1. Installez une implémentation Common Lisp sur le serveur. (Par exemple , sbcl , clisp , etc ...)
  2. Installez quicklisp sur le serveur.
  3. Charger SWANK avec (ql:quickload :swank)
  4. Démarrer le serveur avec (swank:create-server) . Le port par défaut est 4005 .
  5. [Sur votre machine locale] Créez un tunnel SSH avec ssh -L4005:127.0.0.1:4005 [remote machine]
  6. Connectez-vous au serveur swank distant en cours d'exécution avec Mx slime-connect . L'hôte doit être 127.0.0.1 et le port 4005 .


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow