原文位址
為了學習Clojure,我最近特别在windows下配置了基于Emacs的Clojure開發環境。把過程做個記錄,跟大家分享一下。過程不算太複雜,關鍵是要多使用Google來解決問題,有些版本問題比較難解決,耐心多嘗試就能成功。很多同學都說使用linux更合适等等,我覺得确實有道理,但windows畢竟是很多程式員每天工作必用的工具,使用起來友善的多,是以還是有必要折騰一把。
開始了,首先我的作業系統是64位的windows7,英文版。随着現在記憶體的價格下降,64位win7系統已經開始成為程式員的主要工作平台,是以我們配置的開發環境也要能支援64位win7才算合格。
具體步驟:
1. 安裝jdk,因為Clojure是基于JVM的語言,是以java開發環境肯定是必裝的。我們直接下載下傳Oracle官方的64位安裝包,1.7的最新版本:jdk-7u2-windows-x64.exe。下載下傳完畢後輕按兩下安裝即可。
安裝完畢,添加環境變量JAVA_HOME,内容為jdk的系統路徑。
例如:
JAVA_HOME => D:\Program Files\Java\jdk1.7.0_02
PATH => D:\Program Files\Java\jdk1.7.0_02\bin
打開終端,測試,輸入java –version回車

2. 安裝maven2,maven是java開發常用的項目建構工具,提供jar包的管理功能,因為leiningen需要使用maven的軟體倉庫進行包的管理,是以,我們先要安裝maven2。從官方下載下傳壓縮包,我下載下傳的是2.2.1版
下載下傳網站:http://maven.apache.org/download.html
下載下傳完畢,解壓到本地目錄,我放置在D:\new\apache-maven-2
添加環境變量:各位同學請輸入自己的路徑
M2_HOME => D:\new\apache-maven-2
M2 => D:\new\apache-maven-2\bin
MAVEN_OPTS => -Xms256m -Xmx512m
PATH => %M2%
打開終端,測試,輸入mvn --version回車
3. 安裝leiningen,leiningen是基于Clojure的項目建構工具,可以為Clojure項目打包解決項目依賴,這也是我們這次配置中要使用的主要工具。
下載下傳leiningen的windows壓縮包和jar包(這裡注意,不要用1.62的安裝腳本安裝,運作後面步驟時會出現錯誤),我下載下傳的是:
leiningen-1.5.2-win.zip和leiningen-1.7.0-SNAPSHOT-standalone.jar
下載下傳網站:https://github.com/technomancy/leiningen/downloads
下載下傳完畢,leiningen-1.5.2-win.zip解壓縮到本地目錄。我放置在D:\new\lein,同時把leiningen-1.7.0-SNAPSHOT-standalone.jar拷貝到這個檔案夾下面
Path => D:\new\lein
LEIN => D:\new\lein
LEIN_JAR => d:\new\lein\leiningen-1.7.0-SNAPSHOT-standalone.jar
打開終端,測試,輸入 lein version回車
安裝leiningen插件:
swank-clojure,用于Emacs的repl插件,內建了SLIME功能。使用指令
lein plugin install swank-clojure 1.4.0回車
lein會自動下載下傳相關依賴并安裝swank-clojure
至此,lein安裝完畢
4. 安裝Emacs,Emacs是一個多功能的文本編輯工具,可謂大名頂頂,是Hacker們的最愛。我們下載下傳最新的Emacs2.4版。
下載下傳位址:https://code.google.com/p/emacs-for-windows/updates/list
壓縮包解壓到本地路徑。
安裝Clojure插件clojure-mode
下載下傳位址https://github.com/jochu/clojure-mode
隻下clojure-mode.el即可,下載下傳完畢放到Emacs的預設插件目錄下面
在win7下,Emacs的預設插件目錄是C:\Users\使用者名\AppData\Roaming\.emacs.d\
由于AppData是隐藏檔案,要注意。我放置的路徑是C:\Users\Adam\AppData\Roaming\.emacs.d\clojure-mode\clojure-mode.el
Emacs的預設配置檔案夾是C:\Users\使用者名\AppData\Roaming,配置檔案名是.emacs。如果檔案不存在,可以手動建立一個。
編輯.emacs檔案,添加如下内容:
(add-to-list 'load-path "~/.emacs.d")
(add-to-list 'load-path "~/.emacs.d/clojure-mode")
(require 'clojure-mode)
其他插件可選擇性的安裝,關于Emacs插件的安裝和配置,這裡就不多講了,大家多Google即可。記住一點,開源東西bug不少,版本相容性差,大家一定要耐得住性子才能成功啊。堅持,再堅持,哈哈,痛苦的過程。
推薦安裝的插件:auto-complete, paredit,color-theme
全部的配置如下:
1 (add-to-list 'load-path "~/.emacs.d")
2 (add-to-list 'load-path "~/.emacs.d/clojure-mode")
3 (add-to-list 'load-path "~/.emacs.d/color-theme")
4 (add-to-list 'load-path "~/.emacs.d/auto-complete")
5
6 (require 'clojure-mode)
7
8 (require 'color-theme)
9 (color-theme-initialize)
10 (color-theme-xemacs)
11
12 (require 'auto-complete-config)
13 (ac-config-default)
14 (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/dict")
15
16 (autoload 'paredit-mode "paredit"
17 "Minor mode for pseudo-structurally editing Lisp code." t)
18 (add-hook 'emacs-lisp-mode-hook (lambda () (paredit-mode +1)))
19 (add-hook 'lisp-mode-hook (lambda () (paredit-mode +1)))
20 (add-hook 'lisp-interaction-mode-hook (lambda () (paredit-mode +1)))
21 (add-hook 'scheme-mode-hook (lambda () (paredit-mode +1)))
22 (add-hook 'clojure-mode-hook (lambda () (paredit-mode +1)))
23 (add-hook 'slime-repl-mode-hook (lambda () (paredit-mode +1)))
24 (defun override-slime-repl-bindings-with-paredit ()
25 (define-key slime-repl-mode-map
26 (read-kbd-macro paredit-backward-delete-key) nil))
27 (add-hook 'slime-repl-mode-hook 'override-slime-repl-bindings-with-paredit)
28
29 (custom-set-variables
30 ;; custom-set-variables was added by Custom.
31 ;; If you edit it by hand, you could mess it up, so be careful.
32 ;; Your init file should contain only one such instance.
33 ;; If there is more than one, they won't work right.
34 '(tool-bar-mode nil))
35 (custom-set-faces
36 ;; custom-set-faces was added by Custom.
37 ;; If you edit it by hand, you could mess it up, so be careful.
38 ;; Your init file should contain only one such instance.
39 ;; If there is more than one, they won't work right.
40 '(default ((t (:inherit nil :stipple nil :background "gray80" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 113 :width normal :foundry "outline" :family "Consolas")))))
41
42 (show-paren-mode 1)
43 (setq visible-bell nil)
44 (setq scroll-step 1
45 scroll-margin 3
46 scroll-conservatively 10000)
47 (global-linum-mode 'linum-mode) ;
48 (set-scroll-bar-mode nil) ;去掉滾動條
49 (auto-save-mode nil) ;;禁止自動儲存
50 (global-set-key (kbd "C-|") 'other-window);
51 (setq frame-title-format
52 '("%S" (buffer-file-name "%f"
53 (dired-directory dired-directory "%b"))))
5. 好了,安裝完畢,經過一大堆的配置,現在我們要開始享受勞動成果了。
1) 建立一個檔案夾,我用的是D:\new\ClojCodes\
2) 進入終端,輸入以下指令:
cd d: 回車
cd new\ClojCodes\ 回車
lein new Project1回車
3) 這時,會建立一個D:\new\ClojCodes\ Project1的項目檔案夾
我們打開這個檔案下的project1.clj把内容修改為:
1 (defproject SwankProject "1.0.0-SNAPSHOT"
2 :description "FIXME: write description"
3 :dependencies [[org.clojure/clojure "1.3.0"]
4 [org.clojure/clojure-contrib "1.2.0"]])
儲存。
4) 終端下進入這個檔案夾,輸入
lein deps回車
lein将通過maven的倉庫管理,自動下載下傳依賴的jar包并更新
可能需要較長時間的等待,請耐心。
5) 啟動Emacs,打開我們修改過的project1.clj,按下alt+x,Emacs的表示法為M-x,在提示處輸入clojure-jack-in,稍候片刻,就會出現slime的repl界面,然後我們可以輸入簡單的clojure代碼進行測試和程式設計了。
文章結束,祝大家玩的開心。
最後的截圖: