為了學習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
全部的配置如下:
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把內容修改為:
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代碼進行測試和編程了。
文章結束,祝大家玩的開心。
最后的截圖: