Clojure有彩色REPL吗?

thn*_*tos 37 syntax-highlighting colors clojure read-eval-print-loop

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

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

示例IRB:

替代文字

Ven*_*ius 25

这里的派对相当晚,但你可以通过使用Leiningen插件Ultra(它也支持彩色堆栈跟踪和漂亮打印的测试输出),或者将Whidbey添加到你的Leiningen插件列表中来实现.

样品Ultra REPL:在此输入图像描述


Mic*_*zyk 17

我不知道有任何方法可以使用基本的Clojure REPL,就像java -cp clojure.jar clojure.main语法高亮一样.但是,如果您使用Emacs和SLIME(Clojure社区的很大一部分选择的开发环境!),那么您可以使用SLIME REPL突出显示语法clojure-mode.

首先,你必须从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))))
Run Code Online (Sandbox Code Playgroud)

然后将其添加到slime-repl-mode-hook:

(add-hook 'slime-repl-mode-hook
          (lambda ()
            (font-lock-mode nil)
            (clojure-font-lock-setup)
            (font-lock-mode t)))
Run Code Online (Sandbox Code Playgroud)

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


0x8*_*x89 9

如果你只是想要的颜色的提示,并且使用Leiningen(你应该),你可以使用:repl-optionsANSI转义序列:

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

参考文献:

  • 要使其适用于您的用户而不是单个项目,请将其添加到`〜/ .lein/profiles.clj` (2认同)
  • 把它放在`〜/ .lein/profiles.clj`中,用于全局彩色repl:`{:user {:repl-options {:prompt(fn [ns](str"\ 033 [1; 32m"ns"=>" "\ 033 [0m"))}}}` (2认同)

Rei*_*ica 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)
  • 为Clojure安装Swank
  • 打开你的Clojure项目吧 M-x clojure-jack-in

Emacs REPL