2014-11-25 10 views
4

我想以漂亮打印的形式直接在我的Emacs緩衝區中插入評估Clojure表達式的結果。在Emacs中用Cider評估的表達式獲得漂亮結果

例如,對於類似:

;; [emacs lisp] 
    (insert (nrepl-dict-get (nrepl-sync-request:eval "(range 30)") "value")) 

我得到的,在感興趣的緩衝,

;;=> 
    (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29) 

在過去,我已經讓我的Clojure漂亮地打印的東西,像這樣:

(nrepl-dict-get 
    (nrepl-sync-request:eval 
    (format "(clojure.core/let [x %s] (with-out-str (clojure.pprint/pprint x)))" 
      "(range 30)")) 
    "value") 
;;=> 
"(0\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n 10\n 11\n 12\n 13\n 14\n 15\n 16\n 17\n 18\n 19\n 20\n 21\n 22\n 23\n 24\n 25\n 26\n 27\n 28\n 29)\n" 

然而,"\n被插入ES披着披肩;我想讓它們插入非轉義狀態。換句話說,我希望直接插入漂亮的結果而不用轉義引號或換行符。這用於在早期版本的蘋果酒和cider-nrepl

回答

2

包裝:

(nrepl-dict-get 
    (nrepl-sync-request:eval 
    (format "(clojure.core/let [x %s] (with-out-str (clojure.pprint/pprint x)))" 
      "(range 30)")) 
    "value") 

read應該解決這個問題。

+0

這做到了...感謝,錯誤! – JohnJ 2014-11-25 13:28:36

1

我剛加入這個功能lispy(它是一個使用蘋果酒Clojure的EVAL一個Paredit式 包): 2E意願來一個漂亮的打印EVAL和插入,而 Ë將繼續做一個簡單的。

下面是一個例子(|代表點):

|(for [x (range 8)] (range x)) 

Ê

|(for [x (range 8)] (range x)) 
(() (0) (0 1) (0 1 2) (0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5) (0 1 2 3 4 5 6)) 

2E

|(for [x (range 8)] (range x)) 
(() 
(0) 
(0 1) 
(0 1 2) 
(0 1 2 3) 
(0 1 2 3 4) 
(0 1 2 3 4 5) 
(0 1 2 3 4 5 6)) 

當然你仍然可以做EJM來完成同樣的事情:

(for [x (range 8)] (range x)) 
|(() 
(0) 
(0 1) 
(0 1 2) 
(0 1 2 3) 
(0 1 2 3 4) 
(0 1 2 3 4 5) 
(0 1 2 3 4 5 6))