REPL-driven development
開發 clojure ,不免要做的事情自然是不停地調用 REPL 來測試自己寫的函數是否如預期般地執行,而 vim 可以安裝 plugin ,讓這個調用 REPL 的步驟完全留在編輯器內執行。這個開發方式又稱為 REPL-driven development 。
安裝 vim-fireplace
首先要準備幾樣東西:
- clojure 的 nREPL
- vim
在 vim 裡安裝合適的 plugin :
cd ~/.vim/bundle
git clone git://github.com/tpope/vim-fireplace.git
啟用方式:
在 clojure 的專案資料夾,開啟一個 shell ,啟動 nREPL。指令是
lein repl
。搭配 tmux 來使用:
tmux new-session -d -s repl 'lein repl'
在同一個資料夾,開啟另一個 shell ,啟動 vim 。如此一來, vim 的 fireplace plugin 就會自動與 nREPL 連接了。
文字檔不在 clojure 專案資料夾內時,fireplace 的啟用方式:
- 還是一樣啟動 nREPL。指令是
lein repl
如果文字檔並不是 clj 結尾。需要先讓 vim 知道它是 clojure 的 source code ,下指令
:set filetype=clojure
連線到現在已經啟動的 nREP ,例如下指令
:Connect nrepl://127.0.0.1:41767
常用指令:
求值
- 隨便選一個 expression 做 repl 移動游標到程式碼上,然後
:Eval
。 快速鍵是cpp
- 指定一段區間的程式碼做 repl
:1,3Eval
- 打開 Clojure 的 Quasi-REPL (prompt 型式)
cqp
- 打開 Clojure 的 Quasi-REPL (window 型式)
cqc
在 quickfix 視窗顯示 docstring 或是 source code
- 快捷鍵
K
。 對應 repl 的(doc ...)
, 也可以用:Doc
- 快捷鍵
[d
。 對應 repl 的(source ...)
, 也可以用:Source
在文件裡穿梭
- 快捷鍵
[<C-d>
。 跳躍到符號定義的那一行,即使是定義在 jar 檔中。 - 快捷鍵
gf
。 語義是 go to file 。 對於 namespace 會產生作用。
重新載入程式碼
- 讓 REPL 重新載入現在的 namespace
:Require
- 讓 REPL 重新載入現在的 namespace 及其使用的 namespace
:Require!
補完提示 (Omnicomplete)C-x C-o