emacs로 clojure와 부비부비

2 minute read

OS X 기준으로 설명. 요즘 Windows에서 clojure 만질 일이 없다.

leiningen 설치

매버릭스(Mavericks)를 쓰고 있어 JDK는 설치 안 했다. 설치돼서 나오는 JDK 6.0을 그냥 쓴다. 문제 생기면 업데이트하면 되는 거고.

JDK는 해결됐으니 이제 경쟁자가 없는 clojure 프로젝트 자동화 도구인 leiningen(이하 lein)을 설치하면 된다. lein이 project.clj 에 정의한 clojure 버전을 모시고오니깐 따로 clojure를 다운받을 필요 없다.

homebrew 패키지 매니저로 설치할 수 있다. 이렇게 편한 걸 마다할 이유가 없지.

$ brew install leiningen
$ lein repl
user=> (println “hello clojure”)
hello clojure
nil

오키! lein 설치 잘 됐다. 이제 emacs 환경을 세팅하면 된다.

cider 설치

M-x package-install <RET> cider <RET>

CIDER를 설치하자. nrepl에서 CIDER로 이름을 바꿨다. Clojure IDE and Repl for emacs 약자라니. 이름 참 잘 짓는다. 개발자가 그냥 사과주를 좋아하는 것 같은데.

M-x cider-jack-in

lein 프로세스를 띄어 빨대를 꼽는다. 일단 실행이 되는지 알아보는 게 중요하니 지금은 아무 버퍼에서나 실행한다.

The lein executable (specified by `cider-lein-command’) isn’t on your exec-path

이런 게 뜨네. exec-path 에 lein이 없나벼.

emacs를 시작할 때, PATH 환경 변수를 그대로 안 가져온다. clojure 만지고 싶어 근질거리니 이유는 나중에 찾아보기로 한다. homebrew가 심볼릭 링크(symbolic link)를 저장하는 디렉토리가 PATH 에 빠져있다.

(setq mac? (eq system-type 'darwin))
(when mac?
  (let ((usr-local "/usr/local/bin"))
    (add-to-list 'exec-path usr-local)
    (setenv "PATH" (concat usr-local path-separator (getenv "PATH")))))

windows에서 bash를 emacs shell로 사용을 참고해서 추가한다.

WARNING: CIDER's version (0.7.0-snapshot) does not match cider-nrepl's version (not installed)

\*scratch\* 버퍼에서 M-x cider-jack-in 을 실행하면 이런 경고가 나온다. cider-nrepl 이 없어서 사용 못 하는 기능을 나열한다. 아쉬우니 설치한다. 설치하려면 lein 프로젝트 파일을 만들어야 한다.

cider-nrepl 플러그인

$ cd ~;mkdir sample-prj;cd sample-prj
$ lein new hello

lein 프로젝트 만들고

M-x find-file <RET> ~/sample-prj/hello/project.clj

emacs에서 프로젝트 파일을 연다

(defproject hello "0.1.0-SNAPSHOT”
  ...
  :plugins [[cider/cider-nrepl "0.7.0-SNAPSHOT"]])

cider-nrepl 플러그인을 project.clj 에 추가한다. M-x cider-jack-in 실행. 뭔가 좀 걸리는 데 참으면 된다. 다운받는 중이다.

이제 warning이 사라졌다. clojure와 부비부비 고고.

함께 쓰면 좋을 clojure 패키지

clojure-emacs에 cider말고도 다른 프로젝트가 많다.

자동 완성을 마다할 필요가 없다. ac-cider 설치.

font-lock, 들여쓰기, 코드 내비게이션이 필요하면 clojure-mode. font-lock이라는 용어가 낯설다. text에 face를 할당하는 건데, 이걸로 문법 강조를 할 수 있다.

이전에 쓰던 건 여기까지. 이 글을 쓰면서 살펴보니 디게 많네. inspect, tracing, refactor, … 섹시한 거 많네. 이건 써보고 기회 되면 관련 글을 쓸 예정이다.

참고

UPDATED <2014-09-20 Sat> ac-nrepl을 ac-cider로 교체 UPDATED <2024-03-07 Thu> 죽은 링크 취소선

C-x C-s C-x C-c