【问题标题】:Is there a colored REPL for Clojure?Clojure 有彩色的 REPL 吗?
【发布时间】:2011-01-29 07:25:08
【问题描述】:

我想获得一个用于 clojure 代码的彩色 REPL,类似于您可以使用 IRB for Ruby 执行的操作。

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

示例 IRB:

【问题讨论】:

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


【解决方案1】:

在这里参加聚会已经很晚了,但是您可以通过使用 Leiningen 插件 Ultra(它还支持彩色堆栈跟踪和漂亮打印的测试输出)或将 Whidbey 添加到您的列表中来获得它而是使用 Leiningen 插件。

Ultra REPL 示例:

【讨论】:

    【解决方案2】:

    我不知道有什么方法可以让基本的 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)))
    

    等等,下次连接到 SLIME REPL 时,clojure-mode 语法突出显示可用。如果您也将 SLIME 用于 Common Lisp,您需要对其进行调整,使其不会尝试使用 CL 进行 Clojure 突出显示。此外,这只是第一个近似值;它有点中断的一件事是提示突出显示(namespace&gt; 将不再突出显示)。不过,无论如何,我都不是一个精通font-lock 黑客,所以我就不说了。 :-)

    【讨论】:

    • 哦,顺便说一句,这真的 replaces SLIME REPL 突出显示与 clojure-mode 突出显示...关于通常的 REPL 突出显示有一些有用的东西,当人们在使用这个。希望在某个时候可以对其进行改进,以减少这种权衡。
    • 很遗憾我不是 Emacs 用户,但这看起来确实很酷。
    • @thnetos:谢谢! @所有可能关心的人:我已将代码放在此处的 Gist 中:gist.github.com/337280 - 当前版本包括两个 defadvice 以突出显示 *out* 上的提示和打印输出,因为它们通常在 SLIME 中REPL,而其他所有内容仍然具有 clojure 模式的亮点。
    • 此代码的最新版本现在是 Phil Hagelberg 的新 durendal 项目的一部分。
    • CIDER 的 REPL 具有内置的着色支持(虽然它的工作方式并不像这样,因为表达式在评估后会被字体锁定)。
    【解决方案3】:

    如果您只想为提示着色并且您正在使用Leiningen(您应该这样做),您可以使用:repl-optionsANSI escape sequences

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

    参考资料:

    【讨论】:

    • 要将其应用于您的用户而不是单个项目,请将其添加到 ~/.lein/profiles.clj
    • 把这个放在~/.lein/profiles.clj 中,用于全局彩色repl:{:user {:repl-options {:prompt (fn [ns] (str "\033[1;32m" ns "=&gt;" "\033[0m "))}}}
    • 将其添加到~/.lein/profiles.clj 时,将配置放在:repl 配置文件中,而不是:user。所以结构是{:repl {:repl-options {:prompt …}}}。这确保了配置只为lein repl 定义,而不是为lein test 等其他子命令。
    【解决方案4】:
    • 安装 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

    【讨论】:

    【解决方案5】:

    一些颜色在 VimClojure 中有 REPL。

    【讨论】:

      【解决方案6】:

      试试 Chris Granger 的 Light Table Playground。它是更雄心勃勃的多语言 IDE 的第一部分。

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

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

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

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

      【讨论】:

      • 伟大的项目,但遗憾的是现在没有活动
      【解决方案7】:

      CIDER 用户可以通过将以下内容添加到他们的配置中来获得彩色 REPL:

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

      【讨论】:

        【解决方案8】:

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

        我相信它在后台使用nREPL

        【讨论】:

        • 是的,它完全使用 nRepl,但采用了当然可以配置的自定义着色策略 (contributor@here)
        【解决方案9】:

        如果您是 Intellij 用户,出色的 Cursive 是一个不错的选择,它提供了可以自定义的漂亮颜色:

        【讨论】:

          【解决方案10】:

          要使您的 REPL 输出着色,请尝试 repl-color

          【讨论】:

            【解决方案11】:

            你可以试试 LightTable,它可以让你选择函数并立即运行。

            【讨论】:

              猜你喜欢
              • 2012-12-27
              • 1970-01-01
              • 2011-06-28
              • 1970-01-01
              • 2011-09-18
              • 1970-01-01
              • 2016-10-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多