Clojure有彩色REPL吗?

时间:2010-03-19 03:25:17

标签: clojure colors syntax-highlighting read-eval-print-loop

我想为clojure代码获得一个彩色的REPL,类似于使用IRB for Ruby可以做的事情。

是否有任何用于提供REPL自动着色的user.clj库或设置?

示例IRB:

alt text

11 个答案:

答案 0 :(得分:23)

派对的时间相当晚,但是你可以通过使用Leiningen插件Ultra(也支持彩色叠加和漂亮打印的测试输出)或添加Whidbey来实现这一点改为你的Leiningen插件列表。

示例Ultra REPL:enter image description here

答案 1 :(得分:16)

我不知道有什么办法让基本的Clojure REPL(如java -cp clojure.jar clojure.main之类的东西开始)进行语法高亮显示。但是,如果你使用Emacs& SLIME(Clojure社区很大一部分选择的开发环境!),然后你可以使用像clojure-mode这样的SLIME REPL高亮语法。

首先,您必须从clojure-mode函数中提取一些代码(定义在clojure-mode.el的顶部):

;;; 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)))

Etvoilà,下次连接到SLIME REPL时,您将有clojure-mode语法高亮显示。如果你也使用SLIME for Common Lisp,你会想要调整它,所以它不会尝试使用CL进行Clojure突出显示。而且,这只是第一次近似;它有一点突破是提示突出显示(namespace>事物将不再突出显示)。尽管如此,我不是一个熟练的font-lock黑客,所以我会留下它。 : - )

答案 2 :(得分:9)

如果您只想为提示设置颜色并使用Leiningen(您应该使用),则可以使用:repl-optionsANSI escape sequences

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

参考文献:

答案 3 :(得分:5)

  • 安装Emacs 24
  • 安装Emacs Starter Kit v2
  • M-x package-install - &gt; 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

答案 4 :(得分:2)

一些着色在Vim Clojure中有REPL。

答案 5 :(得分:2)

试试Chris Granger的Light Table Playground。这是更多模式的多语言IDE的第一部分。

它有一个颜色Clojure REPL,可以对整个代码块进行实时评估和显示。

http://www.chris-granger.com/lighttable/

您可以在此处查看项目的更高级别视图:

http://www.kickstarter.com/projects/ibdknox/light-table

答案 6 :(得分:2)

CIDER用户可以通过在配置中添加以下内容来获取彩色REPL:

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

答案 7 :(得分:1)

Eclipse Counterclockwise REPL提供完整的语法着色(包括彩虹括号着色)。

我相信它会使用nREPL

答案 8 :(得分:1)

如果您是Intellij用户,优秀的Cursive是一个很好的选择,并提供可以自定义的漂亮颜色:

enter image description here

答案 9 :(得分:0)

要让您的REPL输出变为彩色,请尝试repl-color

enter image description here

答案 10 :(得分:0)

您可以尝试使用LightTable,它可以让您选择功能并立即运行。