2010-03-19 57 views
34

我想爲clojure代碼獲取一個彩色的REPL,類似於您可以使用IRB for Ruby所做的操作。Clojure有沒有彩色的REPL?

是否有提供自動着色REPL的user.clj的庫或設置?

例IRB:

alt text

+0

太漂亮了!我怎麼能得到這個SLIME REPL? – Zolomon 2011-04-16 22:04:57

+1

@Zolomon - 請參閱下面的答案。 – 2011-09-29 20:16:14

+1

相似的問題:[做什麼使'lein repl'五顏六色?](http://stackoverflow.com/q/19500353/578288) – 2014-10-01 08:45:28

回答

16

我不知道有什麼辦法讓基本的Clojure REPL,像java -cp clojure.jar clojure.main之類的東西開始,做語法高亮。但是,如果您使用Emacs & SLIME(Clojure社區絕大部分的開發環境!),那麼您可以使用SLIME REPL高亮語法,如clojure-mode

;;; all code in this function lifted from the clojure-mode function 
;;; from clojure-mode.el 
(defun clojure-font-lock-setup() 
    (interactive) 
    (set (make-local-variable 'lisp-indent-function) 
     'clojure-indent-function) 
    (set (make-local-variable 'lisp-doc-string-elt-property) 
     'clojure-doc-string-elt) 
    (set (make-local-variable 'font-lock-multiline) t) 

    (add-to-list 'font-lock-extend-region-functions 
       'clojure-font-lock-extend-region-def t) 

    (when clojure-mode-font-lock-comment-sexp 
    (add-to-list 'font-lock-extend-region-functions 
       'clojure-font-lock-extend-region-comment t) 
    (make-local-variable 'clojure-font-lock-keywords) 
    (add-to-list 'clojure-font-lock-keywords 
       'clojure-font-lock-mark-comment t) 
    (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil)) 

    (setq font-lock-defaults 
     '(clojure-font-lock-keywords ; keywords 
      nil nil 
      (("+-*/.<>=!?$%_&~^:@" . "w")) ; syntax alist 
      nil 
      (font-lock-mark-block-function . mark-defun) 
      (font-lock-syntactic-face-function 
      . lisp-font-lock-syntactic-face-function)))) 

然後將其添加到slime-repl-mode-hook

(add-hook 'slime-repl-mode-hook 
      (lambda() 
      (font-lock-mode nil) 
      (clojure-font-lock-setup) 
      (font-lock-mode t))) 

的Et瞧

首先,你必須解除從clojure-mode功能的一些代碼(朝clojure-mode.el頂部定義) ,下次連接到SLIME REPL時,將會有clojure-mode語法突出顯示。如果你也對Common Lisp使用SLIME,你會想調整它,所以它不會嘗試用CL來做Clojure突出顯示。另外,這只是第一個近似值;有一件事是突出顯示(namespace>事情不會再突出顯示)。儘管如此,我並不是一個精通font-lock黑客的人,所以我會留下它。 :-)

+1

哦,順便說一下,這真的*取代* SLIME REPL突出與clojure-模式突出顯示......通常的REPL有一些有用的東西可以突出顯示在使用這個時可能會丟失哪些信息。希望在某些時候可以對此進行細化,以減少這種交換。 – 2010-03-19 06:11:14

+0

不幸的是,我不是Emacs用戶,但這看起來很酷。 – thnetos 2010-03-19 15:56:06

+0

@thnetos:謝謝! @所有這些可能涉及到的人:我已經把代碼放在Gist這裏:http://gist.github.com/337280 - 當前版本包含兩個'defadvice',用於在* out中提示和打印輸出*'突出顯示,因爲他們通常在SLIME REPL中,而其他一切仍然獲得clojure模式亮點。 – 2010-03-28 02:27:34

1

Eclipse Counterclockwise REPL提供完整的語法着色(包括彩虹支架着色)。

我相信它在底層使用nREPL

+0

是的,它確切地使用nRepl,但採用自定義着色策略,當然可以配置(貢獻者@在這裏) – 2015-09-09 16:03:40

5
  • 安裝的Emacs 24
  • 安裝Emacs Starter Kit v2
  • M-x package-install - >starter-kit-lisp
  • 添加到init.el:(add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup)
  • 安裝Swank for Clojure
  • 打開你的Clojure項目和M-x clojure-jack-in

Emacs REPL

+1

這應該更新爲使用https://github.com/kingtim/nrepl。el而不是swank-clojure – 0x89 2013-05-13 15:19:40

9

如果你只是想要的顏色的提示,並且使用Leiningen(你應該),你可以使用:repl-optionsANSI escape sequences

:repl-options {:prompt (fn [ns] 
         (str "\033[1;32m" 
           ns "=>" 
           "\033[0m "))} 

參考文獻:

+2

爲了使這適用於您的用戶而不是單個項目,請將此添加到'〜/ .lein/profiles.clj'中。 – 2014-02-12 15:35:23

+2

將它放在'〜/ .lein/profiles.clj'中以獲得全局顏色repl:'{:user {:repl-options {:prompt(fn [ns](str「\ 033 [1; 32m」ns「=>」「\ 033 [0m」))}}}' – 2014-03-23 12:04:02

+0

當添加到'〜/ .lein/profiles.clj',把配置放在':repl'配置文件中,而不是':user'。所以結構是'{:repl {:repl-options {:prompt ...}}}'。這確保了配置只是爲'lein repl'定義的,而不是像'lein test'這樣的其他子命令。 – 2015-11-30 07:21:07

2

CIDER用戶可以通過添加以下到他們的配置獲得着色REPL:

(setq cider-repl-use-clojure-font-lock t) 
0

爲了讓您的REPL輸出着色試repl-color

​​

21

而是遲到了,在這裏,但你可以使用Leiningen插件Ultra(其中也有彩色的蹤跡和漂亮的打印測試輸出支持),或通過添加Whidbey您Leiningen插件列表得到這個代替。

樣品超REPL:enter image description here

0

如果你是一個用戶的IntelliJ,優秀的Cursive是一個不錯的選擇,並提供漂亮的顏色,你可以自定義:

enter image description here

0

你可以試試LightTable,它可以讓你選擇功能並立即運行。