수색…


설치

Emacs MELPA 저장소의 최신 SLIME을 사용하는 것이 가장 좋습니다 : 패키지가 약간 불안정 할 수 있지만 최신 기능을 얻을 수 있습니다.

Portale 및 다중 플랫폼 Emacs, Slime, Quicklisp, SBCL 및 Git

Slime, SBCL, Quicklisp 및 Git : Portacle으로 이미 구성된 Emacs25의 이식 가능 다중 플랫폼 버전을 다운로드 할 수 있습니다. 그것은가는 빠르고 쉬운 방법입니다. 스스로 모든 것을 설치하는 법을 배우고 싶다면 계속 읽어보십시오.

수동 설치

GNU Emacs (> = 24.5) 초기화 파일 ( ~/.emacs 또는 ~/.emacs.d/init.el )에 다음을 추가하십시오 :

;; 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 자체는 괜찮지 만 Quicklisp 패키지 관리자가 더 잘 작동합니다. Quicklisp 을 설치하려면 웹 사이트의 지침을 따르십시오 (roswell을 사용하는 경우 roswell 지침을 따르십시오). 일단 설치되면, 당신의 리스프 호출 :

(ql:quickload :quicklisp-slime-helper)

Emacs init 파일에 다음 행을 추가하십시오 :

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

다시 시작한 후 GNU Emacs는 필요한 모든 패키지를 설치하고 설정합니다.

SLIME 시작 및 완료, 특수 (쉼표) REPL 명령

Emacs에서 Mx slime 은 기본 (첫 번째) Common Lisp 구현으로 Mx slime 을 시작합니다. 가변 slime-lisp-implementations 통해 여러 구현이 제공되는 경우 다른 구현은 미니 버퍼에서 사용 가능한 구현을 선택할 수있는 M-- Mx slime 통해 액세스 할 수 있습니다.

Mx slime 은 다음과 같이 보이는 REPL 버퍼를 열 것입니다 :

; SLIME 2016-04-19
CL-USER> 

SLIME REPL 버퍼는 몇 가지 특수 명령을 허용합니다. 그들 모두와 함께 시작 , . 일단 , 옵션 목록은 미니 버퍼에 표시됩니다, 입력됩니다. 그들은 다음을 포함합니다 :

  • ,quit
  • ,restart-inferior-lisp
  • ,pwd - Lisp가 실행중인 곳의 현재 디렉토리를 출력한다.
  • ,cd - 현재 디렉토리를 변경합니다.

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)

평가 후에 출력되는 결과는 문자열 일뿐만 아니라 그 뒤에있는 풀 리플레이 (full-on) Lisp 객체가 있습니다.이 객체는 마우스 오른쪽 버튼으로 클릭하고 Inspect를 선택하여 검사 할 수 있습니다.

멀티 라인 입력도 가능합니다. Cj 를 사용하여 새로운 라인을 만듭니다. Enter 키를 누르면 입력 한 양식이 평가되고 양식이 완료되지 않으면 오류가 발생할 수 있습니다.

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

오류 처리

평가에서 오류가 발생하는 경우 :

CL-USER> (/ 3 0)

디버거 버퍼가 다음 내용으로 표시됩니다 (SBCL lisp).

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

커서를 아래쪽으로 움직이면 --- more --- 백 트레이스가 더 확장됩니다.

역 추적의 각 행에서 Enter 를 누르면 특정 호출에 대한 추가 정보 (사용 가능한 경우)가 표시됩니다.

다시 시작 줄에 Enter 키를 누르면 특정 다시 시작이 호출됩니다. 또는 재시작은 숫자 0 , 1 또는 2 로 선택할 수 있습니다 (버퍼의 아무 곳에서나 해당 키를 누릅니다). 기본 재시동은 별표로 표시되며 q 키 ( "종료")를 눌러 호출 할 수 있습니다. q 를 누르면 디버거가 닫히고 REPL에 다음이 표시됩니다.

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

마지막으로 Lisp 디버거가 처리 할 수없는 오류가 발생할 수 있습니다. 오류가 발생하면 저수준 디버거로 떨어지거나 비정상적으로 종료됩니다. 이런 종류의 오류의 원인을 보려면 *inferior-lisp* 버퍼로 전환하십시오.

SSH 터널을 통한 SWANK 서버 설정.

  1. 서버에 Common Lisp 구현을 설치하십시오. (예 : sbcl , clisp 등 ...)
  2. 서버에 quicklisp 을 설치하십시오.
  3. SWANK를 (ql:quickload :swank) swank)와 함께로드하십시오 (ql:quickload :swank)
  4. (swank:create-server) 하여 서버를 시작하십시오. 기본 포트는 4005 입니다.
  5. [로컬 컴퓨터에서] ssh -L4005:127.0.0.1:4005 [remote machine] 하여 SSH 터널을 만듭니다 ssh -L4005:127.0.0.1:4005 [remote machine]
  6. Mx slime-connect 를 사용하여 실행중인 원격 서버에 Mx slime-connect 합니다. 호스트는 127.0.0.1 이고 포트는 4005 여야합니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow