2010-03-19 198 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,它可以让你选择功能并立即运行。