사용 소프트웨어: Emacs, CLISP, SLIME, HyperSpec
1. Emacs: 강력한 에디터.
Nqmacs 버전으로 Emacs 22.1이 될 개발버전을 컴파일한 Win32 배포본을 설치합니다.
http://sourceforge.net/project/showfiles.php?group_id=92168 에서
emacs-22.0.50.1-20050626-w32.zip를 다운로드 하여 적당한 디렉토리에 압축풀면 됩니다.
저는 C:\Program Files\emacs에 설치했습니다.
실행은 bin 디렉토리 밑에 runemacs를 실행하면 되고, 필요할 경우 바탕화면이나 시작 메뉴에 바로가기를 만들어주면 됩니다.
2. Common LISP: Emacs는 LISP로 짜여졌지만, Common LISP(이하 CL)를 사용하기 위해서는 따로 CL을 설치해야합니다. 공개 CL 중에 CLISP, SBCL을 많이 쓰는거 같은데, 여기서는 CLISP를 설치합니다.
https://sourceforge.net/project/showfiles.php?group_id=1355
에서
clisp-2.41-win32-mingw-without-readline.zip를 다운로드 하여 C:\Program Files에 압축을 풀었으며, 설치는 따로 필요없고 Emacs 설정에서 LISP 프로그램만 설정해주면 됩니다. 아래 .emacs에 대해서 설명 참조하세요.
3. SLIME: Emacs 내에서 CL 개발 환경을 만들어주는 플러그인. CLISP, SBCL등 대부분의 CL을 지원합니다.
자주 업데이트 되기 때문에 CVS 버전을 사용할 것을 권장하고 있습니다. 사용중에도 안되는게 있으면 CVS업데이트치라고 하더라고요.
http://common-lisp.net/project/slime/ 에서 설치 관련 정보를 찾을수 있습니다.
CVSROOT는 :pserver:anonymous@common-lisp.net:/project/slime/cvsroot
암호는 anonymous
모듈은 slime
emacs/site-lisp에서 체크아웃하면 됩니다. 저는 TortoiseCVS를 사용하여 체크아웃했습니다.
4. HyperSpec: Common Lisp HyperSpec (CLHS)는 CL 프로그램을 작성하면서 API를 조회할수 있는 HTML 문서입니다. clisp가 설치된 doc 디렉토리 밑에 설치하면 됩니다.
http://www.lispworks.com/documentation/HyperSpec/ 에서 밑에 보시면 download가 있습니다. tar.gz 파일인데 받아서 적당히 풀어주면 됩니다. 디렉토리 구조는 아래처럼 되면 됩니다.
clisp-2.41
doc
HyperSpec
Body
Data
Front
Graphics
Issues
일단 이렇게 하면 설치는 끝났고 설정만 남았습니다. 설정은 c:\.emacs 파일을 만들어주면 됩니다.
제 .emacs 파일을 공개합니다 🙂 C:\.emacs 에 저장해주면 됩니다.
먼저 한글 관련 설정 (전 세벌식 사용자!):
;; 한글환경 설정
(set-language-environment “UTF-8”)
(setq default-input-method “korean-hangul3”)
(set-input-method “korean-hangul3”)
(prefer-coding-system ‘utf-8-dos)
(utf-translate-cjk-load-tables)
;; 글로벌 폰트락 설정
(global-font-lock-mode 1 t)
;; 한영전환 shift-space로 하기
(global-set-key [?\S- ] ‘toggle-input-method)
shift-space로 한영 전환하면 한글조합하는게 이맥스창 내에서 보이고, 윈도우즈 한/영키를 이용하면 조합할때 다른곳에 보이기 때문에 불편합니다.
리스프 설정:
;; inferior lisp
(setq inferior-lisp-program “c:/Progra~1/clisp-2.41/base/lisp.exe -M c:/Progra~1/clisp-2.41/base/lispinit.mem”
lisp-indent-function ‘common-lisp-indent-function
slime-complete-symbol-function ‘slime-fuzzy-complete-symbol
slime-startup-animation nil)
;; slime
(add-to-list ‘load-path “c:/Progra~1/emacs/site-lisp/slime”)
(require ‘slime)
(slime-setup)
(setq common-lisp-hyperspec-root “c:/Progra~1/clisp-2.41/doc/HyperSpec/”)
;(setq common-lisp-hyperspec-root “http://www.lispworks.com/documentation/HyperSpec/“)
inferior-lisp라고 되어있는건 emacs lisp가 더 좋다는 의미에서 나온게 아닐까 생각이 드네요. 지금 찾아보니 emacs 밑에 붙는다고 해서 inferior인거 같네요… hyperspec은 LISP 온라인 문서입니다. LISP 배우실려면 로컬에 설치하는것이 좋죠.
기타 설정:
;(setq visible-bell t)
;(setq sound-alist ‘(t 1))
;(setq bell-volume 10)
(global-set-key “%” ‘match-paren)
(defun match-paren (arg)
“Go to the matching paren if on a paren; otherwise insert %.”
(interactive “p”)
(cond ((looking-at “\\s\(“) (forward-list 1) (backward-char 1))
((looking-at “\\s\)”) (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1)))))
(setq make-backup-files t)
앞에 세줄은 오류날때 소리나는거 조절할수있는데, 지금은 주석처리되어 있네요. vi에서 처럼 %로 괄호간 이동할수 기능이 구현되어 있습니다. 커서가 괄호위에 있을때만 동작합니다.
.emacs 파일에 더 내용이 있긴 한데, 나머지는 사용하면서 자동으로 Emacs에서 추가해준 설정 내용이라 공개 안합니다.
그리고 Slime 시작할때 약간 오류가 나는데 slime.el 파일을 약간 바꿔줘야합니다. CVS에 따라서 라인은 약간 다를수 있지만 현재는 1890번줄에서
‘(iso-latin-1-unix iso-8859-1-unix binary))
–>
‘(utf-8-unix emacs-mule-unix binary))
위 처럼 바꿔주면 정상적으로 slime이 시작됩니다. 고친 방법이 정상적인 방법인지는 저도 모르지만, 아직까진 문제없이 잘 돌리고 있습니다.
그럼 모든 설치가 완료되었으니 runemacs로 Emacs를 실행하고 “M-x slime” 하면 REPL이 뜨고 LISP를 바로 사용할수 있습니다. lisp 파일 편집중 C-c C-c로 현재 위치의 S-exp을 LISP로 보낼수 있으며, C-x C-e로 커서 바로 이전 S-exp를 부분적으로 실행해 볼수 있습니다. 편집중 C-c C-z로 REPL로 다시 갈수 있습니다. SLIME 기능이 많기 때문에 좀더 공부해서 다음에 다시 설명하겠습니다.^^