使用cvs slime,配置参照Common Lisp on Mac OS X。
(add-to-list 'load-path "~/elisp/3rd-party-lib/slime/") (add-to-list 'load-path "~/elisp/3rd-party-lib/slime/contrib/") (require 'slime) (slime-setup '(inferior-slime slime-asdf slime-autodoc slime-banner slime-c-p-c slime-editing-commands slime-fancy-inspector slime-fancy slime-fuzzy slime-highlight-edits slime-parse ;; slime-presentation-streams slime-presentations slime-references slime-scratch slime-tramp ;; slime-typeout-frame slime-xref-browser)) ; fixed per suggestion from tcr on #lisp (setq slime-net-coding-system 'utf-8-unix) (setq slime-lisp-implementations '((sbcl ("sbcl" "--core" "/home/liang/lib/cl/sbcl.core-with-slime") :init (lambda (port-file _) (format "(swank:start-server %S :coding-system \"utf-8-unix\")\n" port-file)) :coding-system utf-8-unix) (cmucl ("lisp")) (ecl ("ecl")) (allegro ("/usr/local/stow/AllegroCL/alisp")) (clisp ("clisp") :coding-system utf-8-unix) (lispworks ("")) (openmcl ("dx86cl64")))) (setq slime-default-lisp 'sbcl) (defun start-slime () (interactive) (unless (slime-connected-p) (save-excursion (slime)))) (add-hook 'slime-mode-hook 'start-slime) (add-hook 'slime-load-hook #'(lambda () (require 'slime-fancy))) (add-hook 'inferior-lisp-mode-hook #'(lambda () (inferior-slime-mode t)))
(eval-after-load "hyperspec" '(progn (setq common-lisp-hyperspec-root "/home/liang/lib/cl/HyperSpec/"))) (defun indent-or-complete (&optional arg) (interactive "p") (if (or (looking-back "^\\s-*") (bolp)) (call-interactively 'lisp-indent-line) (call-interactively 'slime-indent-and-complete-symbol))) (eval-after-load "lisp-mode" '(progn (define-key lisp-mode-map [tab] 'indent-or-complete) (define-key lisp-mode-map [(meta ?q)] 'slime-reindent-defun))) (eval-after-load "slime" '(progn (define-key slime-mode-map [return] 'paredit-newline) (define-key slime-repl-mode-map [tab] 'indent-or-complete) (define-key inferior-slime-mode-map [(control ?c) (control ?p)] 'slime-repl-previous-prompt))) (autoload 'turn-on-cldoc-mode "cldoc" nil t) (dolist (hook '(lisp-mode-hook slime-repl-mode-hook)) (add-hook hook 'turn-on-cldoc-mode)) (autoload 'paredit-mode "paredit" "Minor mode for pseudo-structurally editing Lisp code." t) (dolist (hook '(emacs-lisp-mode-hook lisp-mode-hook slime-repl-mode-hook)) (add-hook hook #'(lambda nil (paredit-mode 1)))) (eval-after-load "paredit" '(progn (define-key paredit-mode-map [?\)] 'paredit-close-parenthesis) (define-key paredit-mode-map [(meta ?\))] 'paredit-close-parenthesis-and-newline)))